三维圆圈的MATLAB绘制程序

绘制3维圆圈

空间圆的参数方程

对于一般情况,即圆心为 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),半径为 r r r,位于平面
A ( x − x 0 ) + B ( y − y 0 ) + C ( z − z 0 ) = 0 , A 2 + B 2 ≠ 0 (1) A(x-x_0)+B(y-y_0)+C(z-z_0)=0, \quad A^2+B^2\neq0 \tag{1} A(xx0)+B(yy0)+C(zz0)=0,A2+B2=0(1)
上的圆的参数方程可以写为:
x = x 0 + r B A 2 + B 2 cos ⁡ θ + r A C A 2 + B 2 A 2 + B 2 + C 2 s i n θ y = y 0 − r A A 2 + B 2 cos ⁡ θ + r B C A 2 + B 2 A 2 + B 2 + C 2 s i n θ z = z 0 − r A 2 + B 2 A 2 + B 2 + C 2 s i n θ , 0 ⩽ θ ⩽ 2 π (2) \begin{aligned} x & = x_0 + r \frac {B} {\sqrt{A^2+B^2}} \cos\theta + r \frac {AC} {\sqrt{A^2+B^2} \sqrt{A^2+B^2+C^2}} sin\theta \\ y & = y_0 - r \frac {A} {\sqrt{A^2+B^2}} \cos\theta + r \frac {BC} {\sqrt{A^2+B^2} \sqrt{A^2+B^2+C^2}} sin\theta \\ z & = z_0 - r \frac {\sqrt{A^2+B^2}} {\sqrt{A^2+B^2+C^2}}sin\theta, \quad 0 \leqslant \theta \leqslant 2\pi \\ \end{aligned} \tag{2} xyz=x0+rA2+B2 Bcosθ+rA2+B2 A2+B2+C2 ACsinθ=y0rA2+B2 Acosθ+rA2+B2 A2+B2+C2 BCsinθ=z0rA2+B2+C2 A2+B2 sinθ,0θ2π(2)
其中, n ⃗ = ( A , B , C ) \vec{n}=(A,B,C) n =(A,B,C)对应平面的法向向量。

  • 注:该方程针对 A A A B B B 不同时为0的情况。

MATLAB代码实现

clear,clc
close all
%% 定义初始圆的参数
% 定义3维圆圈的圆心坐标
O = [0, 0, 0];
% 定义半径的大小
r = 2;
% 定义法向向量
n = [1, 1, 2];
%% 开始绘制3维圆圈
theta = linspace(0, 2*pi, 100);
x = O(1)+r*n(2)/sqrt(n(1)^2+n(2)^2).*cos(theta)+...
	r*n(1)*n(3)/(sqrt(n(1)^2+n(2)^2)*sqrt(n(1)^2+n(2)^2+n(3)^2)).*sin(theta);
y = O(2)-r*n(1)/sqrt(n(1)^2+n(2)^2).*cos(theta)+...
	r*n(2)*n(3)/(sqrt(n(1)^2+n(2)^2)*sqrt(n(1)^2+n(2)^2+n(3)^2)).*sin(theta);
z = O(3)-r*sqrt(n(1)^2+n(2)^2)/sqrt(n(1)^2+n(2)^2+n(3)^2).*sin(theta);
plot3(x,y,z,'r-', 'LineWidth', 1.3)
hold on

另一种球面坐标系中空间圆参数方程的描述

球坐标系

上图所示是球坐标系下的点 ( r , θ , ϕ ) (r,\theta,\phi) (r,θ,ϕ),球坐标系与对应的空间直角坐标系上某一点 ( x , y , z ) (x,y,z) (x,y,z)之间可通过下式建立联系:
x = r s i n ( θ ) c o s ( ϕ ) y = r s i n ( θ ) s i n ( ϕ ) z = r c o s ( θ ) (3) \begin{aligned} x&=rsin(\theta)cos(\phi)\\ y&=rsin(\theta)sin(\phi)\\ z&=rcos(\theta) \end{aligned} \tag{3} xyz=rsin(θ)cos(ϕ)=rsin(θ)sin(ϕ)=rcos(θ)(3)

MATLAB代码实现

定义三维圆圈的圆心坐标 O O O 和半径 r r r。同时定义圆的法向向量 v v v

clear,clc
close all
%% 定义初始圆的参数
% 定义3维圆圈的圆心坐标
O = [0, 0, 0];
% 定义半径的大小
r = 2;
% 定义法向向量
n = [1, 1, 2];
%% 开始绘制3维圆圈
phi = linspace(0,2*pi,100);     % 绘制完整圆一定是(0,2*pi)
theta = atan(-(n(1)*cos(phi)+n(2)*sin(phi))/n(3));
% 球坐标系(r,θ,φ)与直角坐标系(x,y,z)的转换关系表达式
x_r = O(1)+r*cos(theta).*cos(phi);
y_r = O(2)+r*cos(theta).*sin(phi);
z_r = O(3)+r*sin(theta);
plot3(x_r,y_r,z_r,'r-', 'LineWidth', 1.3)
hold on
axis equal
plot3(O(1),O(2),O(3),'ro','MarkerFaceColor','r')
t1 = linspace(0,1,100);
plot3(O(1)+n(1)*phi([1 5]),...
    O(2)+n(2)*phi([1 5]),...
    O(3)+n(3)*phi([1 5]),...
    'b-', 'LineWidth', 1.5)
hold off

参考文献

罗治国.空间圆的参数方程及其应用[J].湖南师范大学自然科学学报,2012,35(06):24-26.

猜你喜欢

转载自blog.csdn.net/alan1ly/article/details/121388058