由于是自制函数,并没有太多时间严格全方面测试,有bug请反馈
文件分享请等待
部分函数并非由用户使用角度出发设计,因此并不人性化,而是作为HDK教程的案例、展示C++写法等
所有函数均支持函数下拉提示(下面会提到)
预期,所有函数均佩戴黑框描述(下面会提到)
理论上所有涉及几何空间的函数,均支持三维空间,如下文多个求交点、求距离的函数。同,未大量测试,有bug请反馈
阶乘,就是高中数学那个阶乘,5!=5 * 4 * 3 * 2 * 1,就是从你指定的数,一直乘到1为止
用于展示HDK/C++的递归写法
支持函数名提示(后续所有函数均支持、无必要则不再反复放图)
支持函数用法(即黑框提示)(后续所有函数均支持、无必要则不再反复放图)
点到直线的距离
直线是无限长的,注意区分线段、射线的概念
线使用两端点坐标表示
第七行 prt() 是我自己制作的精简版printf,大概在会在讲解(中)或者讲解(下)轮到
2022年发的prt功能讲解
点到线段的距离的平方
暂时不建议使用
线段到线段的距离
直线到直线的距离
VEX新手注意,这是一个比较少见的用法
红线处 vector & intersect_pos
VEX新手注意,这是一个比较少见的用法
与其他常见函数的描述不同,用法也不同,这里多了个 &
VEX新手注意,这是一个比较少见的用法
用法:需要提前定义一个空变量,放入函数参数中,执行完函数这一行后,这个变量里面就不是空的了,会有值存在里面
由于有多个返回值(超过两个返回值),所以必须使用这种方法输出多个返回值,之后也会有这个用法的函数,就不再提了
其中float val返回的是两条直线平行的程度,越接近0则越平行
这个函数还有个问题,如果两条直线没有交点,函数也会返回一个坐标,我猜测是无交情况下,他们俩之间最近的点或者中点什么的
上面的图目前有点问题,出02的时候一起改掉
下面的图是最新的,是对的
参数同 (5)segmentsegmentdistance
pos0、pos1分别为最近点
不完善的地方理解一下,这个很费时间
富 哥 可 以 v 我 5 0 , 讠身寸 讠身寸
使用b站 落于ivi 分享的 Houdini 获取两条线条之间最近距离的数值(工具分享) 作为案例
float min_d = 9999;
vector ipos0;
vector ipos1;
for(int i=0;i<npoints(0)-1;i++)
{
for(int j=0;j<npoints(1)-1;j++)
{
vector p0 = point(0,'P',i);
vector p1 = point(0,'P',i+1);
vector p2 = point(1,'P',j);
vector p3 = point(1,'P',j+1);
float d = segmentsegmentdistance_R(p0,p1,p2,p3);
if(d<min_d)
{
min_d = d;
vector pos0;
vector pos1;
linelineintersect_R(p0,p1,p2,p3,pos0,pos1);
ipos0 = pos0;
ipos1 = pos1;
}
}
}
addpoint(0,ipos0);
addpoint(0,ipos1);
prt(min_d);