<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt"><div>Hi,</div><div>I'm trying to find the angle between two vectors from three points, like in the vtkAngleWidget. I've checked vtkAngleRepresentation2D.cxx and made the functions below. Is there any simpler way to get the angle?</div><div><br></div><div style="background-color: transparent;"> void get_angle_old(double p1[3], double c[3], double p2[3])</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> double theta1 = atan2(p1[1]-c[1],p1[0]-c[0]);</div><div style="background-color: transparent;"> double theta2 = atan2(p2[1]-c[1],p2[0]-c[0]);</div><div style="background-color: transparent;"> if ( p1[0]-c[0] == 0.0 || p2[0]-c[0] == 0.0 )</div><div style="background-color: transparent;">
{</div><div style="background-color: transparent;"> return;</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"> if ( (theta1 >= 0.0 && theta1 <= vtkMath::Pi() &&</div><div style="background-color: transparent;"> theta2 >= 0.0 && theta2 <= vtkMath::Pi()) ||</div><div style="background-color: transparent;"> (theta1 <= 0.0 && theta1 >= -vtkMath::Pi() &&</div><div style="background-color: transparent;"> theta2 <= 0.0 && theta2 >= -vtkMath::Pi()) )</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> ; //do nothin
angles are fine</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"> else if ( theta1 >= 0.0 && theta2 <= 0.0 )</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> if ( (theta1 - theta2) >= vtkMath::Pi() )</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> theta2 = theta2 + 2.0*vtkMath::Pi();</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"> else //if ( theta1 <= 0.0 && theta2 >= 0.0 )</div><div style="background-color: transparent;">
{</div><div style="background-color: transparent;"> if ( (theta2 - theta1) >= vtkMath::Pi() )</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> theta1 = theta1 + 2.0*vtkMath::Pi();</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"> }</div><div style="background-color: transparent;"><span style="background-color: transparent; font-size: 10pt;"> std::cout << "Angle = " << vtkMath::DegreesFromRadians(abs(theta1-theta2)) << std::endl;</span><br></div><div style="background-color: transparent;"><span style="background-color: transparent; font-size: 10pt;"> }</span><br></div><div style="background-color: transparent;"><br></div><div
style="background-color: transparent;"> void get_angle_new(double p1[3], double c[3], double p2[3])</div><div style="background-color: transparent;"> {</div><div style="background-color: transparent;"> double vector2[3], vector1[3];</div><div style="background-color: transparent;"><span style="background-color: transparent; font-size: 10pt;"> vector1[0] = p1[0] - c[0];</span><br></div><div style="background-color: transparent;"> vector1[1] = p1[1] - c[1];</div><div style="background-color: transparent;"> vector1[2] = p1[2] - c[2];</div><div style="background-color: transparent;"> vector2[0] = p2[0] - c[0];</div><div style="background-color: transparent;"> vector2[1] = p2[1] - c[1];</div><div style="background-color: transparent;"> vector2[2] = p2[2] - c[2];</div><div style="background-color: transparent;"> vtkMath::Normalize( vector1
);</div><div style="background-color: transparent;"> vtkMath::Normalize( vector2 );</div><div style="background-color: transparent;"> double angle = acos( vtkMath::Dot( vector1, vector2 ) );</div><div style="background-color: transparent;"><span style="background-color: transparent; font-size: 10pt;"> std::cout << "angle: " << vtkMath::DegreesFromRadians(angle) << std::endl;</span><br></div><div style="background-color: transparent;"><span style="background-color: transparent; font-size: 10pt;"> }</span><br></div></div></body></html>