我正在使用 point3D 和 vector3D 类,我需要一些帮助将点调整给定距离。
- 点 A - 位于坐标 0,0,0 的点。
- B 点 - 位于坐标 1,1,1 的点。
- 向量 AB - 向量 AB 告诉我两点 A 和 B 之间的长度是距离 = 1.73205078。
代码:
Point3D A = new Point3D { X = 0, Y = 0, Z = 0 };
Point3D B = new Point3D { X = 1, Y = 1, Z = 1 };
Vector3D AtoB = A - B;
Double distanceBetweenAandB = AtoB.Length; // the distance will be 1.73205078 here.
我想调整 B 点。我想将 A 点和 B 点之间的距离减少到 0.5 而不是 1(调整到位置 C,如图所示)。我正在努力弄清楚如何做到这一点。
A 点 (0,0,0) 已知,B 点 (1,1,1) 已知,调整距离 (0.5) 已知。我如何计算?
伪代码:
Point3D A = new Point3D { X = 0, Y = 0, Z = 0 };
Point3D B = new Point3D { X = 1, Y = 1, Z = 1 };
Double distanceToAdjust = 0.5;
Point3D newCoordinate = B - distanceToAdjust; // this doesnt work!
调整后的B点如下图所示:
我正在使用自己定义的 Point3D 类和 Vector3D 类。
最佳答案
让我们为您的点假设您给定的参数,并创建第三个点,我们将其称为 newCoordinate
,该点 A
将作为您的引用:
Point3D A = new Point3D { X = 0, Y = 0, Z = 0 };
Point3D B = new Point3D { X = 1, Y = 1, Z = 1 };
Double distanceToAdjust = 0.5;
Point3D newCoordinate = new Point3D {
A.X + ((B.X - A.X) * distanceToAdjust),
A.Y + ((B.Y - A.Y) * distanceToAdjust),
A.Z + ((B.Z - A.Z) * distanceToAdjust)
}
这里我们看到了原始点:
假设此值,newCoordinate
将位于 X=0.5、Y=0.5、Z=0.5。漂亮的图表如下:
就在那里,就在两个原始点之间。
作为模拟,如果您更改 A 和 B 并改为假定此值:
Point3D A = new Point3D { X = -8, Y = 4, Z = 3 };
Point3D B = new Point3D { X = 3, Y = 2, Z = 1 };
那么 newCoordinate
位置将为 X=-2.5, Y=3, Z=2。
现在,相同点,但使用 distanceToAdjust = 1.2
:
记住这两点:
- 距离的变化总是需要一个引用点。在我的样本中,我假定为 A;这就是为什么它出现在每个
newCoordinate
参数初始化的第一部分。 - distanceToAdjust 被视为一个乘数。
附录:我用来帮助可视化的漂亮工具 can be found here .
关于c# - 如何将一个 3D 点与另一个 3D 点的距离调整给定距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21001728/