三维圆圈的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(x−x0)+B(y−y0)+C(z−z0)=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+B2Bcosθ+rA2+B2A2+B2+C2ACsinθ=y0−rA2+B2Acosθ+rA2+B2A2+B2+C2BCsinθ=z0−rA2+B2+C2A2+B2sinθ,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.