Search code examples
c++computational-geometrycgal

How to compute a point on a line in CGAL


Given a 3D line in CGAL, how do I compute a point on that line that is some known distance from an endpoint?


Solution

  • If you have two points P0 and P1, you can make a vector V = P1 - P0.

    Given distance D from P0, you can get the resulting point R = P0 + (D ÷ ||V||) ⋅ V.

    (Linearly interpolate between the lines, changing D into a percentage by dividing by the full length of the line.)


    I don't know CGAL (and the documentation kind of sucks), but I assume it'd be something like this:

    Line_3<K> l = /* ... */;
    Vector_3<K> v = l.to_vector();
    Point_3<K> r = l.p + (d * d / v.squared_length()) * v;
    

    Note I can't even find a way to get the starting point of a line, so that one is up to you. (The l.p part is made up.)