找回密码
 欢迎注册
查看: 18736|回复: 3

[求助] 如何由平面椭圆推断其对应的空间圆

[复制链接]
发表于 2019-3-7 22:12:29 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
假设有一个半径为R的球S,其球心在原点(0,0,0)处。在球面上有一个半径为r的圆C,其在xOy平面上的投影为\(x^2+y^2=r^2 \),即一个圆心在(0,0)点且半径为r的圆。
现在如果将球绕x轴和y轴旋转一定角度(分别是α、β),圆C在xOy面上的投影会变成一个中心在\((x_e, y_e)\),长短轴分别为a,b,倾斜角为θ的椭圆。其方程其实只是球S与一个和原点距离为\(\sqrt{R^2-r^2}\)的平面联立并带入\(z=0\)的结果。
(↑这个结论只在u、v不太大的角度下成立,角度大了会变成其他圆锥曲线,不过我实际上关心的是它的逆问题,所以无所谓)

我的问题是,现在已知椭圆E的中心在\((x_e, y_e)\)处,其长短轴分别为a,b,倾斜角为θ,然后知道其对应的球球心在原点半径为R,其对应圆C的半径为r,希望求解圆C的方程,或者旋转角α、β。



配的图方便理解就好,代码中坐标系方向有点奇怪,主要是因为其物理模型是图像处理的问题。
  1. clear all;close all;clc;hold all;

  2. % 右手系 x右 y下 z里

  3. % 球
  4. R=24;r=11;a=sqrt(R^2-r^2);

  5. % 旋转 以正前方为起点 顺时针为正
  6. alpha=20; % 水平旋转 绕y轴
  7. beta=15;   % 垂直旋转 绕x轴

  8. x0 = 0;
  9. y0 = 0;
  10. z0 = -a;
  11. alpha = deg2rad(alpha);
  12. beta = deg2rad(beta);

  13. x0 =  x0*cos(alpha) + z0*sin(alpha);
  14. y0 =  x0*sin(alpha)*sin(beta) + y0*cos(beta) - z0*sin(beta)*cos(alpha);
  15. z0 = -x0*sin(alpha)*cos(beta) + y0*sin(beta) + z0*cos(beta)*cos(alpha);

  16. % 平面
  17. [x,y,z]=meshgrid(-25:1:25);
  18. f = x0 .* (x - x0) + y0 .* (y - y0) + z0 .* (z - z0);

  19. % 球
  20. [u, v]=meshgrid((0:0.02:1)*pi, (-1:0.02:1)*pi);
  21. xi = R .* sin(u) .* cos(v);
  22. yi = R .* sin(u) .* sin(v);
  23. zi = R .* cos(u);

  24. subplot(1,2,1);
  25. % patch(isosurface(x,y,z,f,0), 'EdgeColor', 'none', 'FaceColor', 'b', 'FaceAlpha', 0.2);
  26. surface(xi, yi, zi, 'EdgeColor', 'k', 'FaceColor', 'none', 'EdgeAlpha', 0.3);
  27. h = contourslice(x, y, z, f, xi, yi, zi,[0,0]);
  28. line([0 x0],[0 y0],[0 z0], 'Color', 'm', 'LineWidth', 3)
  29. xx = h.XData;yy = h.YData;zz = h.ZData;
  30. set(h, 'EdgeColor', 'r', 'LineWidth', 3);
  31. xlabel('x');ylabel('y');zlabel('z');
  32. axis equal; grid on; box on;axis([-30 30 -30 30 -30 30]);view(3);
  33. view(0,90);
  34. subplot(1,2,2);
  35. mask = isfinite(yy) & isfinite(xx);
  36. xx=xx(mask);yy=yy(mask);
  37. plot(xx,yy);
  38. xlabel('x');ylabel('y');
  39. axis equal; grid on; box on;axis([-30 30 -30 30]);

复制代码


2.png
1.png

评分

参与人数 1金币 +20 收起 理由
gxqcn + 20 首帖奖励,欢迎常来。

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-3-7 22:55:45 | 显示全部楼层
长轴即直径,圆心即圆心
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-3-8 07:21:10 来自手机 | 显示全部楼层
椭圆和圆的面积比确定了椭圆所在平面和xoy平面的夹角,夹角余弦值即面积必。而椭圆长轴方向确定了平面倾向方向。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-3-8 22:53:37 | 显示全部楼层
这个直接正着来也是可以的。设圆C的参数方程是\(\left(
\begin{array}{c}
r \cos (t) \\
r \sin (t) \\
z \\
\end{array}
\right)\) , 将球绕x轴和y轴旋转一定角度(分别是α、β),代入变换矩阵,得到圆C的新的参数方程是
\[r \left(
\begin{array}{c}
\sin (\alpha ) \sin (\beta ) \sin (t)+\cos (\beta ) \cos (t) \\
\cos (\alpha ) \sin (t) \\
\sin (\alpha ) \cos (\beta ) \sin (t)-\sin (\beta ) \cos (t) \\
\end{array}
\right)+z \left(
\begin{array}{c}
\cos (\alpha ) \sin (\beta ) \\
-\sin (\alpha ) \\
\cos (\alpha ) \cos (\beta ) \\
\end{array}
\right)\]
  1. RotationTransform[\[Beta], {0, 1, 0}][RotationTransform[\[Alpha], {1, 0, 0}][{r Cos[t], r Sin[t], z}]]
复制代码

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-19 08:44 , Processed in 0.046669 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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