如何由平面椭圆推断其对应的空间圆
假设有一个半径为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的方程,或者旋转角α、β。
配的图方便理解就好,代码中坐标系方向有点奇怪,主要是因为其物理模型是图像处理的问题。
clear all;close all;clc;hold all;
% 右手系 x右 y下 z里
% 球
R=24;r=11;a=sqrt(R^2-r^2);
% 旋转 以正前方为起点 顺时针为正
alpha=20; % 水平旋转 绕y轴
beta=15; % 垂直旋转 绕x轴
x0 = 0;
y0 = 0;
z0 = -a;
alpha = deg2rad(alpha);
beta = deg2rad(beta);
x0 =x0*cos(alpha) + z0*sin(alpha);
y0 =x0*sin(alpha)*sin(beta) + y0*cos(beta) - z0*sin(beta)*cos(alpha);
z0 = -x0*sin(alpha)*cos(beta) + y0*sin(beta) + z0*cos(beta)*cos(alpha);
% 平面
=meshgrid(-25:1:25);
f = x0 .* (x - x0) + y0 .* (y - y0) + z0 .* (z - z0);
% 球
=meshgrid((0:0.02:1)*pi, (-1:0.02:1)*pi);
xi = R .* sin(u) .* cos(v);
yi = R .* sin(u) .* sin(v);
zi = R .* cos(u);
subplot(1,2,1);
% patch(isosurface(x,y,z,f,0), 'EdgeColor', 'none', 'FaceColor', 'b', 'FaceAlpha', 0.2);
surface(xi, yi, zi, 'EdgeColor', 'k', 'FaceColor', 'none', 'EdgeAlpha', 0.3);
h = contourslice(x, y, z, f, xi, yi, zi,);
line(,,, 'Color', 'm', 'LineWidth', 3)
xx = h.XData;yy = h.YData;zz = h.ZData;
set(h, 'EdgeColor', 'r', 'LineWidth', 3);
xlabel('x');ylabel('y');zlabel('z');
axis equal; grid on; box on;axis([-30 30 -30 30 -30 30]);view(3);
view(0,90);
subplot(1,2,2);
mask = isfinite(yy) & isfinite(xx);
xx=xx(mask);yy=yy(mask);
plot(xx,yy);
xlabel('x');ylabel('y');
axis equal; grid on; box on;axis([-30 30 -30 30]);
长轴即直径,圆心即圆心 椭圆和圆的面积比确定了椭圆所在平面和xoy平面的夹角,夹角余弦值即面积必。而椭圆长轴方向确定了平面倾向方向。 这个直接正着来也是可以的。设圆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)\]
RotationTransform[\, {0, 1, 0}], {1, 0, 0}][{r Cos, r Sin, z}]]
页:
[1]