direction between points



  • On 11/11/2013 at 03:53, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   r14 
    Platform:      
    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:

    Howdy,

    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. 😉

    Adios,
    Cactus Dan



  • 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[1]-s1pnts[0];               //The first spline's vector  
      Vector vec2 = s2pnts[1]-s2pnts[0];               //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  
      GePrint(RealToString(angle_deg));
    

    -ScottA



  • On 11/11/2013 at 08:35, xxxxxxxx wrote:

    Howdy,

    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);
    

    Adios,
    Cactus Dan



  • 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:

    Howdy,

    Yes, vectors need to be normalized to get a proper angle calculation. 😉

    Adios,
    Cactus Dan


Log in to reply