Rob*_*abe 5 c# math point vector
我正在使用point3D和vector3D类,我需要一些帮助调整给定距离的点.

码:
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.
Run Code Online (Sandbox Code Playgroud)
我想调整点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!
Run Code Online (Sandbox Code Playgroud)
调整后的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)
}
Run Code Online (Sandbox Code Playgroud)
这里我们看到原点:

假设此值,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 };
Run Code Online (Sandbox Code Playgroud)
那么newCoordinate位置将是 X=-2.5, Y=3, Z=2。

现在,同样的观点,但使用distanceToAdjust = 1.2:

请记住以下两点:
newCoordinate参数初始化的第一部分。附录:我用来帮助可视化的漂亮工具可以在这里找到。
在伪代码中,这是我最终实现的方式
\n\npointA = \xe2\x80\xa6\npointB = \xe2\x80\xa6\nvectorAB = B-A\ndesiredDistance = 0.5; // where 0.5 is vectorAB.Length/desiredDistance\nvectorAC = vectorAB * desiredDistance ; \n\npointC = A+vectorAC;\nRun Code Online (Sandbox Code Playgroud)\n\n实际代码:
\n\nVector3D pointC = (Vector3D)(A + (float)desiredDistance * (B - A)); \nRun Code Online (Sandbox Code Playgroud)\n