如何沿曲线计算点?

时间:2010-05-21 18:55:45

标签: wpf math animation curve

我正在为wpf写一个自定义动画,作为一个非数学家我有几个问题......

如果给出两个Point3D,From和To,假设原点是0,0,0,我如何计算两点之间的曲线?

一旦我将曲线'绘制'并且我知道它的长度(如何做到这一点?),我怎样才能计算沿线某个给定距离的x,y,z坐标?

谢谢!

3 个答案:

答案 0 :(得分:5)

获得从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);

要在矢量上获得一定距离,您需要将矢量设为单位矢量(长度为1):

 vector.x = vector.x / length;
 ...

然后乘以你的距离:

 vector.x = distance * vector.x;
 ...

这完全来自记忆,所以可能不会马上编译。

CodeProject上有A Vector Type for C#,它会为你做很多事情。

如果你想要曲线,那么你需要:

a)定义你想要的曲线类型(弧形,样条曲线等)

b)更多点(中心,控制点等)

答案 1 :(得分:0)

您可能希望将曲线表示为一组其他变量的参数函数:

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)应采用何种形式的信息。移动一点 沿着曲线,你只需要在0和1之间变化并计算x,y和z 坐标。一种方法是定义一组您喜欢的控制点 曲线通过(或接近),然后表达你的参数方程 spline functions。为了做到这一点,你不需要知道曲线的弧长。

答案 2 :(得分:0)

所以我只是想跟进我的解决方案 - 虽然确实存在无限数量的曲线 - 我的(措辞不好)问题是如何在曲线上的两个点之间绘制 - 最短距离,假设一个原点0,0,0和2个3d点。我所做的是将我的点从笛卡尔转换为极点,在给定时间计算球点,然后将该点转换回笛卡儿。如果有人要我发布实际的C#代码,请告诉我。