# I'm going crazy

sid_galt
$$A=-[(x_i-X_j)cos\theta_j + (y_i-Y_J)sin\theta_j]$$
$$B = (x_i-X_j)^2+(y_i-Y_j)^2$$
$$E=(B-A^2)^{1/2}=(x_i-X_j)sin\theta_j+(y_i-Y_j)\theta_j$$

I implemented this in C++ as follows

A = -(p_c(0)(i) - p_v(0)(j))*cos(angle(j)) - (p_c(1)(i) - p_v(1)(j))*sin(angle(j))

B = (p_c(0)(i) - p_v(0)(j))*(p_c(0)(i) - p_v(0)(j)) + (p_c(1)(i) - p_v(1)(j))*(p_c(1)(i) - p_v(1)(j))

E=(p_c(0)(i) - p_v(0)(j))*sin(angle(j)) + (p_c(1)(i) - p_c(1)(j))*cos(angle(j))

F= sqrt(B-A*A)

(All parantheses instead of square brackets in arrays to avoid HTML encoding)
where
p_c(0)(i) =$$x_i$$
p_c(1)(i) = $$y_i$$
p_v(0)(j) = $$X_j$$
p_v(1)(j) = $$Y_j$$
angle(j) = $$\theta_j$$

Well, here's the deal. Mathematically
$$E=(B-A^2)^{1/2}=(x_i-X_j)sin\theta_j+(y_i-Y_j)\theta_j$$

However in C++, I am getting different values for E and F in C++ when mathematically they are the same. I am going insane.

Last edited:

sid_galt
Hey guys, I really need help.

Staff Emeritus
Check that your not truncating values. Type-casting is very important in these situtations.

sid_galt
I don't think so because
1. All the quantities are in double
2. The differences are too high, sometimes as high as -1

Staff Emeritus
I would try breaking up the equation and testing to see if your getting expected values.

chronon
sid_galt said:
Well, here's the deal. Mathematically
$$E=(B-A^2)^{1/2}=(x_i-X_j)sin\theta_j+(y_i-Y_j)\theta_j$$
$$E=(B-A^2)^{1/2}=|(x_i-X_j)\sin\theta_j-(y_i-Y_j)\cos\theta_j|$$

sid_galt
chronon said:
$$E=(B-A^2)^{1/2}=|(x_i-X_j)\sin\theta_j-(y_i-Y_j)\cos\theta_j|$$

I tried fabs and fabsf on E. The differences are still there. I am using Dev C++ 4 as the compiler. Could there be something wrong with it?

es
I just tried doing the math in my head but I don't think the equality holds for theta_j=0

E=0
F=abs(y_i-Y_i)

right?

Edit: Wrong. I think the second cosine just fell off when you posted the summary. If the cosine is there, and the absolute values are in place, I think the equality holds.

Last edited: