[已答复] 求助点到圆上某点的距离计算

[复制链接]
matbir 发表于 2020-10-11 21:05:31
我想让一个圆形绕原点自旋转,圆心为(0,0),r=2。取一固定点A(0,1),测得A点到圆形边缘上x坐标为0的距离,圆形自旋转一次测量一次距离,作出以距离为纵坐标的图。理论上得到的图应该是一条直线且y为1。我做出来的不知为何是条变化的曲线,求助大佬们了。
clear,clc,close all;
%绘制圆的曲线
x0=2;y0=0;
i=0:pi/360:2*pi;
x=x0*cos(i)-y0*sin(i);
y=x0*sin(i)+y0*cos(i);
plot(0,1,'*')
hold on
h=plot(x,y);
axis equal
j=200;t=0;%循环次数
k=find(x==0);
yi=y(k)
for n=0:j
    rotate(h,[0,0,1],pi/360)
    t=t+1;
    lh=findall(gca,'type','line'); % 从当前图(gca)中取出曲线的handle
    xc=get(lh,'xdata'); % 取出x轴数据
    yc=get(lh,'ydata'); % 取出y轴数据
  x_nother=xc{1,1};%将当前图形的x坐标给新变量
  y_nother=yc{1,1};%将当前图形的y坐标给新变量
    y_deleten=find(y_nother<0);%找到y小于0的部分
    x_nother(y_deleten)=[];%删除y小于0所对应的x坐标,目的是为了将点限制在上半圆部分
    y_nother(y_deleten)=[];%删除y小于0所对应的x坐标,目的是为了将点限制在上半圆部分
    d=abs(x_nother-0);%寻找圆上离目标点x=0处最近的点
    [d_min, n]=min(d);x_min=x_nother(n);y_min=y_nother(n);
    xm(t)=x_min;ym(t)=y_min;
    getframe;
    hold on
end
figure,plot(ym)

无标题.png

3 条回复


coolchen302 发表于 2020-10-11 21:59:27
你的结果应该也是条直线吧
只是因为精度的问题,看起来不是直线了
看看你贴出图的Y轴数值就清楚了

matbir 发表于 2020-10-12 14:17:14
coolchen302 发表于 2020-10-11 21:59
你的结果应该也是条直线吧
只是因为精度的问题,看起来不是直线了
看看你贴出图的Y轴数值就清楚了 ...

我这边作圆是采用的坐标变换公式,让其离散点以pi/360来分布。然后让圆旋转时也是用rotate函数以pi/360来转动,这样理论上每次旋转,我所测量到的点应该不会发生变化,即距离不会变化,从而它的距离最终会是一条没有误差的直线

matbir 发表于 2020-10-12 15:08:16
问题解决了,首先感谢一楼大哥的回复。
解决方式如下:我自己写了波旋转的函数后,距离的测量便是条直线。
新问题如下:我查help时,rotate一般是用于三维旋转的,我借此想问下大家,我将rotate的第二项参数设为[0 0 1]即表示绕z轴旋转为啥会有误差呢?观察到旋转的过程中,坐标轴会不断的发生平移
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表