在Matlab中给定弧长和方向/角度的曲面上的点

时间:2016-02-04 16:04:44

标签: matlab integration differential-equations

我需要在表面上找到一个点(给定一个相对于起点的角度),其中弧长是使用Matlab给定的值。

假设我有一个高阶曲面,其中z = f(x,y)是使用Matlabs拟合函数从采样点拟合的。如果我有一个起始点,比如说a =(x_0,y_0,f(x_0,y_0))并且想要知道沿xy平面的用户定义角度θ的那个表面上的点的坐标,以便覆盖距离在表面上是给定值,例如10毫米。

我认为我需要做的是解决这个equation的b值,因为我们知道a,s和函数定义表面。但我不确定如何在Matlab中写这个。我假设我需要在Matlab中使用solve函数。

任何有关如何用Matlab和最有效的形式编写此内容的帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是一个假设dx=1dy=1的示例,包含任意x和y步长不应该很难

% //I am assuming here that you know how to get your Z
z=peaks(60); 
% //start point
spoint=[30,30];
% //user given angle
angle=pi/4;
% // distance you want
distance=10;
%// this is the furthes the poitn can be
endpoint=[spoint(1)+distance*cos(angle) spoint(2)+distance*sin(angle)]; 

%// we will need to discretize, so choose your "accuracy"
npoints=100;
%//compute the path integral over the line defined by startpoitn and endpoint
[cx,cy,cz]=improfile(z,[spoint(1) endpoint(1)],[spoint(2) endpoint(2)],npoints);

% // this computes distances between adjacent points and then computes the cumulative sum
dcx=diff(cx);
dcy=diff(cy);
dcz=diff(cz);

totaldist=cumsum(sqrt(dcx.^2+dcy.^2+dcz.^2));
%// here it is! the last index before it gets to the desired distance
ind=find(totaldist<distance,1,'last');

enter image description here

可视化代码

imagesc(z);axis xy;colormap gray
hold on;
plot(spoint(1),spoint(2),'r.','markersize',10)
plot(endpoint(1),endpoint(2),'r*','markersize',5)
plot([spoint(1) endpoint(1)],[spoint(2) endpoint(2)],'b')
plot(cx(ind),cx(ind),'g*','markersize',10)