[已答复] 椭圆上的坐标求解

[复制链接]
我真的服了 发表于 2022-5-9 20:56:42
本帖最后由 我真的服了 于 2022-5-9 22:40 编辑

代码如下:
clear
%%%定义椭圆面反射镜几何参数%%%
a=880;b=560;c=sqrt(a.^2-b.^2); %a,b分布为长短轴长度,c是焦点位置。单位是mm
%%%定义激光照射Sn后产生的等离子体球面光源位置的参数%%%
a1=0.05;b1=0.05;%椭球面光源的长半轴长为  mm,短半轴长为  mm
l=.5*(pi*b1+2*(a1-b1));
lo=linspace(0,l,1000);
dl=lo(2)-lo(1);
syms x1 y1
s1=solve(dl.^2==(x1+a1+c).^2+(y1).^2,((x1+c)./a1).^2+(y1./b1).^2==1,x1,y1);
x1=double(s1.x1);
y1=double(s1.y1);
for i=1:1:999
    n=i+1;
    syms xn yn xi yi
    sn=solve(dl.^2==(xn-xi(2)).^2+(yn-yi(2)).^2,((xn+c)./a1).^2+(yn./b1).^2==1,xn,yn);
    xn=double(sn.xn);
    yn=double(sn.yn);
end


这串代码的意义是:一个中心在(-c,0)的椭圆,对椭圆左上方的1/4曲线,进行等间隔取值,每份为dl,椭圆的长半轴和短半轴长均已知,为a1和b1,所以曲线长度已知,dl也已知。(dl)^2=(dx)^2+(dy)^2现在从椭圆最左边(-a1-c,0)开始,沿着曲线,每隔dl取一次坐标,取1000次,记为(x1,y1),(x2,y2)…(x999,y999),求这些坐标的具体值。 IMG20220509204800.jpg

运行代码后,显示为这样,请问各位大佬这是怎么回事,还是说我的for循环语句有问题?
4A~4GNYFRN44_)%TT}5WH_O.png

2 条回复


我真的服了 发表于 2022-5-11 00:09:25
求个大神来解答下

谢中华 发表于 2022-5-12 15:57:54
发一个参考代码。定义椭圆上足够密集的点,计算相邻两点间距离和累积距离,作为已知数据,然后定义包含1000个等间隔距离值的向量,通过样条插值求对应的x和y坐标。
  1. a = 4;
  2. b = 3;
  3. c = sqrt(a.^2-b.^2);
  4. % 定义椭圆上10000个点的坐标
  5. t = linspace(pi,pi/2,10000)';
  6. x = a*cos(t)-c;
  7. y = b*sin(t);
  8. % 计算相邻两点的距离和累积距离
  9. Len = sqrt(diff(x).^2 + diff(y).^2);
  10. Len = cumsum([0;Len]);
  11. Leni = linspace(0,max(Len),1000);  % 定义包含1000个元素的距离向量
  12. xi = spline(Len,x,Leni);   % 通过样条插值方法求每个距离对应的x坐标
  13. yi = spline(Len,y,Leni);   % 通过样条插值方法求每个距离对应的y坐标
  14. plot(xi,yi)
  15. axis equal
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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