On 11/11/2013 at 03:53, xxxxxxxx wrote:
Cinema 4D Version: r14
Language(s) : C++ ;
hm, i am still having problems to detect the direction between two points. i thought this would work, but it seems not:
Vector angle = VectorToHPB(point_to-point_from);
how do i get the correct angle between two points?
On 11/11/2013 at 05:52, xxxxxxxx wrote:
Well, I think what you need is the Dot Product. The dot product of 2 normalized vectors gives you the cosine of the angle between them.
On 11/11/2013 at 08:17, xxxxxxxx wrote:
There's also the VectorAngle() function in the SDK that you can use. If you want to test the angle of two splines. Using their points rather than their axis values.
//This example gets the angle between two splines
//NOTE: This does NOT!! test the angle between the two spline objects axis values
// You need to move the points of the splines to get a result from this code
// It doesn't care how the two spline objects are oriented to eachother
BaseObject *sp1 = doc->SearchObject("s1");
SplineObject *s1 = ToPoint(sp1);
BaseObject *sp2 = doc->SearchObject("s2");
SplineObject *s2 = ToPoint(sp2);
Vector *s1pnts = s1->GetPointW(); //Get all the points...We only have two points in the spline
Vector *s2pnts = s2->GetPointW(); //Get all the points...We only have two points in the spline
Vector vec1 = s1pnts-s1pnts; //The first spline's vector
Vector vec2 = s2pnts-s2pnts; //The second spline's vector
Real angle_rad = VectorAngle(vec1, vec2); //This gets the angle bewteen the two spline vectors in radians
Real angle_deg = angle_rad*180.0/pi; //Converts radians to degrees
On 11/11/2013 at 08:35, xxxxxxxx wrote:
Ah! I've never noticed the VectorAngle() function in the SDK.
I've always just done it myself like this:
Real angle = ACos(!v1 * !v2);
On 11/11/2013 at 09:08, xxxxxxxx wrote:
thank you for your inputs. i came across the VectorAngle today, too. but it seems it doesn't return what i want. because if i rotate an object by the retrieved value, it behaves wrong when the second point passes the axis of the first point. generally i am trying to rotate an object placed at point x so it points the direction from point x-1 to point x+1. somehow i need to divide the result of VectorAngle by two, also.
btw, what would i need to do if i need 3-dimensional rotation?
On 11/11/2013 at 22:54, xxxxxxxx wrote:
here is a shot of what is happening.
edit: ok, got it now. in my previous approach i missed using the normalized vectors. now it seems to work:
VectorToHPB(from.GetNormalized() - to.GetNormalized())
On 12/11/2013 at 11:10, xxxxxxxx wrote:
Yes, vectors need to be normalized to get a proper angle calculation.