我正在为wpf编写自定义动画,并且作为一个非数学专业的人,我有几个问题...
如果我有两个Point3D,From和To,假设原点在0,0,0处,如何计算两点之间的曲线?
一旦我绘制出曲线并知道其长度(如何实现?),如何计算沿着该线某个给定距离处的x、y、z坐标?
谢谢!
如果我有两个Point3D,From和To,假设原点在0,0,0处,如何计算两点之间的曲线?
一旦我绘制出曲线并知道其长度(如何实现?),如何计算沿着该线某个给定距离处的x、y、z坐标?
谢谢!
要从点A到点B得到一条直线向量:
B - A
这可以翻译为:
vector.x = b.x - a.x;
vector.y = b.y - a.y;
vector.z = b.z - a.z;
length = Math.Sqrt(vector.x * vector.x +
vector.y * vector.y +
vector.z * vector.z);
vector.x = vector.x / length;
...
然后乘以您的距离:
vector.x = distance * vector.x;
...
你可能希望将曲线表示为某个其他变量的参数函数集合:
x = f(t)
y = g(t)
z = h(t)
where 0 <= t <= 1, and
f(0) = from.x, f(1) = to.x
g(0) = from.y, g(1) = to.y
h(0) = from.z, h(1) = to.z
连接任意两点的曲线有无限多条,因此您需要更多信息来决定f(t)、g(t)和h(t)应该采取什么形式。要沿着曲线移动一个点,只需让t在0到1之间变化并计算x、y和z坐标。一种方法是定义一组控制点,使您的曲线通过(或接近)这些点,然后用样条函数表示您的参数方程。您不需要知道曲线的弧长来完成这个过程。
所以我想跟进一下我的解决方案-虽然曲线有无限多个,但我的问题(措辞不当)是如何在曲线上两点之间绘制最短距离,假设原点为0,0,0和两个3D点。我所做的是将我的点从笛卡尔坐标系转换为极坐标系,计算给定时间的球面点,然后将该点转换回笛卡尔坐标系。如果有人想让我发布实际的C#代码,请告诉我。