声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1097|回复: 2

[编程技巧] 已知三维曲线上的点,怎么计算该曲线的长度

[复制链接]
发表于 2014-3-26 10:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
x=[10 8 6 4 2 0 4 6 8 10];
y=[1 2 3 4 5 6 7 8 9 10 ];
z=[7 6 7 3 0 4 5 7 3 1];

上面是已知的三维曲线上的点,第一点和最后一点分别该曲线的两个端点,请问该如何估算该曲线的长度?

回复
分享到:

使用道具 举报

发表于 2014-3-26 12:00 | 显示全部楼层
本帖最后由 牛小贱 于 2014-3-26 14:59 编辑

首先要拟合出这一条三维曲线,然后用微积分的知识解决。先举例子:对于二维曲线,假如半径为r的1/4的弧长计算。
x=r*cos(t);
y=r*sin(t);
(dL)^2=(dx)^2+(dy)^2=r^2*(dt)^2;
dL=r*dt;
代码:
  1. syms  r
  2. L=r*int('L',0,pi/2);
复制代码
结果:
L =1/2*r*pi
同理,对于三维空间
(dL)^2=(dx)^2+(dy)^2+(dz)^2
%matlab
程序
  1. syms t
  2. x=3*t;
  3. y=3*t*t;
  4. z=2*t*t*t;
  5. dL=sqrt((diff(x))^2+(diff(y))^2+(diff(z))^2);
  6. %积分上限验证,证明t从0到1
  7. tx=solve(x-'x','t'),tx=subs(tx,3);
  8. ty=solve(y-'y','t'),ty=subs(ty,3);
  9. tz=solve(z-'z','t'),tz=subs(tz,2);
  10. L=int(dL,0,tx)
复制代码
结果L =5
LZ可以自己想一下,希望对你有所帮助!!

评分

1

查看全部评分

 楼主| 发表于 2014-3-26 14:24 | 显示全部楼层
牛小贱 发表于 2014-3-26 12:00
首先腰拟合出这一条三维曲线,然后用微积分的知识解决。先举个例子:对于二维曲线,假如半径为r的圆,其1/4 ...

谢谢,我试试看
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 17:01 , Processed in 0.059951 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表