判断点是否在多边形内部(冬奥)
(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。
(2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。
(3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。
判断点是否在四边形内部(冬奥)
pointInRect(areaVertex, pos){// 四边形内的点都在顺时针(逆时针)向量的同一边,即夹角小于90o,向量积同向。
var A = areaVertex[0], B = areaVertex[1], C = areaVertex[2], D = areaVertex[3];
var x = pos.x, y = pos.z;
var a = (B[0] - A[0])*(y - A[1]) - (B[1] - A[1])*(x - A[0]);
var b = (C[0] - B[0])*(y - B[1]) - (C[1] - B[1])*(x - B[0]);
var c = (D[0] - C[0])*(y - C[1]) - (D[1] - C[1])*(x - C[0]);
var d = (A[0] - D[0])*(y - D[1]) - (A[1] - D[1])*(x - D[0]);
if((a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0)) {
return true;
}
return false;
}
计算点到直线的距离(冬奥)
pointToLine(line, point){// 计算点到直线的最短距离;
let p1 = line[0], p2 = line[1], p3 = point;
var A = (p1[1] - p2[1]) / (p1[0] - p2[0]);
var B = p1[1] - A * p1[0];
return Math.abs((A * p3.x + B - p3.z) / Math.sqrt(A * A + 1));
}
计算点到线段的最短距离(冬奥)
已知当前绕Y轴的角度值(绕x,z角度均为0),求解方向向量(x,y,z)
let modR = mod.transform.rotationEuler.y / 180 * Math.PI;
let x = -Math.sin(modR);
let z = -Math.cos(modR);
this.rigidBody.move(new Laya.Vector3(x / 100 * this.speed * this.devSpeed, 0, z / 100 * this.speed * this.devSpeed));
已知向量a,b,求解a,b向量的夹角,及a在b向量的顺时针方向还是逆时针方向
let cosAlpha = Laya.Vector3.dot(aV,bV) / (Laya.Vector3.scalarLength(aV) * Laya.Vector3.scalarLength(bV));
let alpha = Math.acos(cosAlpha);// 此值始终大于0小于Math.PI;
let cross = (aV.x * bV.z - bV.x * aV.z);
let g = cross > 0 ? -0.03 : 0.03;// aV在bV的逆时针方向为-0.03;aV在bV的顺时针方向为0.03;
已知两点a,b,计算两点延长线上的某一点(延长距离为dis)(灯笼)
var c = a - b;
c.normalize();
a + c*dis;文章来源:https://www.toymoban.com/news/detail-474727.html
圆方程(摇杆)
x平方 + y平方 = z平方文章来源地址https://www.toymoban.com/news/detail-474727.html
到了这里,关于3D项目中用到的一些算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!