我正在为wpf写一个自定义动画,作为一个非数学家我有几个问题......
如果给出两个Point3D,From和To,假设原点是0,0,0,我如何计算两点之间的曲线?
一旦我将曲线'绘制'并且我知道它的长度(如何做到这一点?),我怎样才能计算沿线某个给定距离的x,y,z坐标?
谢谢!
答案 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#代码,请告诉我。