Usage:
echo(point_to_line( [150,50,0], [0,0,0], [100,0,0] ));
function point_to_line(p,a,b)=
let(
pa = p - a,
ba = b - a,
h = clamp( (pa*ba)/ (ba*ba)))
norm( pa - ba*h ) ;
function clamp(a, b = 0, c = 1) = min(max(a, b), c);
echo(point_to_line( [150,50,0], [0,0,0], [100,0,0] ));
function point_to_line(p,a,b)=
let(
pa = p - a,
ba = b - a,
h = clamp( (pa*ba)/ (ba*ba)))
norm( pa - ba*h ) ;
function clamp(a, b = 0, c = 1) = min(max(a, b), c);
my_dist=distance_point2plane([0,0,50],[100,0,0],[-1,0,0]);
point_projected_on_plane= point-my_dist*planes_normal;
function distance_point2plane(point, planes_origin, planes_normal) =
let (v = point - planes_origin)
(
v.x * planes_normal.x +
v.y * planes_normal.y +
v.z * planes_normal.z
));
echo( len3( [1,1,2] ) );
echo( len3( [1,1,2] - [0,2,0] ) );
function len3(v) =len(v)>1?
sqrt(addl([for(i=[0:len(v)-1])pow(v[i], 2)]))
:len(v)==1?v[0]:v;
function addl(l,c=0)= len(l)-1 >c?l[c]+addl(l,c+1):l[c];
