//两点之间距离
Tool.Distance = function (a, b) {
var L = Vector3.Distance(a, b);
print(L);
return L;
}
//点到线段距离
Tool.DistanceLine = function (p1, p2, p3) // a和b是线段的两个端点,c是检测点
{
// var a = Vector3(59, 0.1, 90);
// var b = Vector3(64, 0.1, 57);
var a = p1;
var b = p2;
var c = p3;
var ab = b - a;
var ac = c - a
// // var f = ab * ac;
var f = ab.x * ac.x + ab.y * ac.y + ab.z * ac.z;
if (f < 0) {
var item = [];
array.add(item, Tool.Distance(a, c));
array.add(item, a);
return item;
}
// // var d = ab * ab;
var d = ab.x * ab.x + ab.y * ab.y + ab.z * ab.z;
if (f > d) {
var item = [];
array.add(item, Tool.Distance(b, c));
array.add(item, b);
return item;
}
//以上两种情况返回的是线段的两端,如果都不符合说明监测点到线段的垂足是在线段内的
var k = f / d;
//D就是垂足点
var D = a + Vector3(k * ab.x, k * ab.y, k * ab.z);
//这是另一种方法只不过计算量大了一些
// var D = Vector3(0, 0, 0);
// if (a.x == b.x) {
// // AB is vertical
// D.x = a.x;
// D.y = c.y;
// } else if (a.y == b.y) {
// // AB is horizontal
// D.x = c.x;
// D.y = a.y;
// } else {
// // linear function of AB
// var m1 = (b.y - a.y) / (b.x - a.x);
// var t1 = a.y - m1 * a.x;
// // linear function of PC
// var m2 = -1 / m1; // perpendicular
// var t2 = c.y - m2 * c.x;
// // c.x * m1 + t1 === c.x * m2 + t2
// D.x = (t2 - t1) / (m1 - m2);
// D.y = m1 * D.x + t1;
// }
var item = [];
array.add(item, Tool.Distance(c, D));
array.add(item, D);
return item;
}
以下代码是以Scorpio(天蝎座)的语法编写的,其中的“array.add”就是为数组添加元素的意思,整段逻辑没有错,要是想直接用的话就用C#重写一遍就行//两点之间距离Tool.Distance = function (a, b) { var L = Vector3.Distance(a, b); print(L); return L;}//点到线段距离Tool.Dist...