我有三个vector3,需要从它们创建一个矩形网格。
使用
var plane = new Plane(Vector3_1, Vector3_2, Vector3_3);
我得到了飞机,但这不是我想要的。 我已经有创建网格的代码,但是找不到丢失的Vector3有麻烦。我在论坛和Unity文档中进行了很多搜索,但没有找到相关迹象。
您是否有任何链接告诉我找出如何找到该值?
答案 0 :(得分:1)
这是我在一分钟内勾勒出的方法:
您将需要遍历这三个点,以找出哪个点与其他两个点形成90,因为这与第四个点相对。该点在图中称为P,而A和B是另外两个点。
从这里我们可以简单地将A和B加P减得到第4点。
以下是一些粗略的代码:
public Vector3 Find4th(Vector3 a, Vector3 b, Vector3 c) {
Vector3 point, cornerA, cornerB;
Vector3[] points = new Vector3[] {a, b, c};
float angleDelta = 180;
int pointIndex = -1;
//find point with angle closest to 90 degrees
for (int i = 0; i < 3; ++i) {
point = points[i];
cornerA = points[i != 0 ? i-1 : 2];
cornerB = points[i != 2 ? i+1 : 0];
Vector3 lineA = cornerA - point;
Vector3 lineB = cornerB - point;
float ang = Mathf.Abs(Vector3.Angle(lineA, lineB)-90);
if (ang < angleDelta) {
angleDelta = ang;
pointIndex = i;
}
}
point = points[pointIndex];
cornerA = points[pointIndex != 0 ? pointIndex-1 : 2];
cornerB = points[pointIndex != 2 ? pointIndex+1 : 0];
return cornerA + cornerB - point;
}
我的测试脚本https://pastebin.com/mKhNq9ZD为我运行的测试产生了预期的结果。