如何计算曲线上的点?
我正在为wpf写一个自定义动画,并且作为一个非数学家伙,我有几个问题...如何计算曲线上的点?
如果给出两个Point3D,From和To,并假设原点位于0,0, 0我如何计算两点之间的曲线?如果我有曲线'绘制'并且知道它的长度(怎么做呢?),我怎样才能计算沿线的某个给定距离处的x,y,z坐标?
谢谢!
为了从点A的直线向量的点B:
乙 - 甲
这将转化为:
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#这将为你做很多事情。
如果你想有一个曲线,那么你需要:
一个)来定义你想要什么类型的曲线(圆弧,样条等)
B)分以上(中心,控制点等)
,则需要第三点您可以查看我上面的注释,但如实说,我不知道我想要什么样的曲线 - 我所知道的是这两点必须存在于我的起源周围的表面上 - 基本上球体或椭球体是我唯一的两个选择...... – Nicros 2010-05-21 21:04:39
你可能想表达你的曲线为一组的其他变量的参数功能:
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
有曲线connectin无限多g任意两点,所以你需要更多的信息来决定f(t),g(t)和h(t)应该采用什么形式。要沿着曲线移动点 ,只需让t在0和1之间变化,然后计算x,y和z坐标。一种方法是定义一组您希望曲线通过(或接近)的控制点,然后根据 spline functions表示您的参数方程。你不需要知道曲线的弧长就可以做到这一点。
感谢您的回复!我上面发表了一些评论,但基本上,我认为我的两点是在一个封闭的表面上 - 一个球体或一个椭球体。所以考虑到原点和这两点,我需要在给定的时间(或沿线的距离)得到xyz位置。 – Nicros 2010-05-21 21:09:57
所以我只是想跟进我的解决方案 - 虽然它是真的有无数的曲线 - 我的(措辞不佳)问题是如何在曲线上的两点之间绘制 - 最短距离,假设0,0,0的原点和两个3d点。我所做的就是将我的点从笛卡尔转换为极点,在给定时间计算球面点,然后将该点转换回笛卡儿。如果有人想让我发布实际的C#代码,请告诉我。
你可能想把它放在http://mathoverflow.net/上,然后回到实施建议。这是一个很好的问题。当你得到解决方案时,把它归档......它会在几年后再次出现,像我一样,你会忘记数学。现在...我是在什么文件下?曲线?...图形?....废话。 – Rusty 2010-05-21 19:02:29
当你说你想要一个“曲线”时,它听起来像你不只是想要在你的两点之间有一条直线,而是你想要一条连接你的端点和其他点之间的曲线。也许将样条曲线和NURBS作为开始。 – FrustratedWithFormsDesigner 2010-05-21 19:07:39
你应该真正指定你想要的曲线类型:有无数曲线通过2点。 编辑:如果你想要一个样条,你至少需要3分。 – nico 2010-05-21 19:09:08