如何用matlab畫出球面上多個已知點的弧線?

時間 2021-06-06 18:28:11

1樓:宇智波帶土

這裡給出一種繪製球面上兩點間圓弧的方法,以供參考:

%% 繪製球面上兩點的圓弧 ellipsoid函式用於繪製橢球

% x^2+y^2 + z ^2 = RR=

1;% 半徑

center=[

0,0,

0];% 球心[x

,y,z

]=ellipsoid

(center(1

),center(2

),center(3

),R,R

,R,30

);figure

surf(x

,y,z

,'LineStyle'

,'none'

,'Facealpha'

,0.2

)axis

equal

hold

on% 花兩點之間的圓弧

p1=[1,

0,0];

p2=[0,

0,1];

plot3(p1

(1),p1(2

),p1(3

),'ro'

)plot3(p2

(1),p2(2

),p2(3

),'ro')xx

=linspace(p1

(1),p2(1

),20

);yy

=linspace(p1

(2),p2(2

),20

);zz

=center(3

)+sqrt

((R^2)-

((xx

-center(1

)).^2)

-((yy-

center(2

)).^

2));

plot3(xx

,yy,zz

,'r-'

)xlabel

('X'

)ylabel

('Y'

)zlabel

('Z'

)第一種情況是在兩點位置比較簡單的情況下,得到影象為:

如果兩點的位置變化的話,如下面上面的程式雖然會有結果但是,可能不是想要的,如:

%% 繪製球面上兩點的圓弧 ellipsoid函式用於繪製橢球

% x^2+y^2 + z ^2 = R

R = 1; % 半徑

center = [0,0,0];% 球心

[x, y, z] = ellipsoid(center(1),center(2),center(3),R,R,R,30);

figure

surf(x, y, z,'LineStyle','none','Facealpha',0.2)

axis equal

hold on

% 畫兩點之間的圓弧

p1=[1,0,0];

p2=[0,-1,0];

plot3(p1(1),p1(2),p1(3),'ro')

plot3(p2(1),p2(2),p2(3),'ro')

xx=linspace(p1(1),p2(1),50);

yy=linspace(p1(2),p2(2),50);

zz=center(3)+sqrt((R^2)-((xx-center(1)).^2)-((yy-center(2)).^2));

plot3(xx,yy,zz,'r-')

xlabel('X')

ylabel('Y')

zlabel('Z')

雖然線在球面上,但是顯然並不是想要的,想要的應該是下面這種情況:

%% 繪製球面上兩點的圓弧 ellipsoid函式用於繪製橢球

% x^2+y^2 + z ^2 = R

R = 1; % 半徑

center = [0,0,0];% 球心

[x, y, z] = ellipsoid(center(1),center(2),center(3),R,R,R,30);

figure

surf(x, y, z,'LineStyle','none','Facealpha',0.2)

axis equal

hold on

% 畫兩點之間的圓弧,其實理想狀況下是Z=0平面上的Y<0圓弧,

% x^2+y^2= R

p1=[1,0,0];

p2=[0,-1,0];

plot3(p1(1),p1(2),p1(3),'ro')

plot3(p2(1),p2(2),p2(3),'ro')

xx=linspace(p1(1),p2(1),50);

zz=0.*xx;

yy=center(2)-sqrt((R^2)-((xx-center(1)).^2)-((zz-center(3)).^2));

plot3(xx,yy,zz,'r-')

xlabel('X')

ylabel('Y')

zlabel('Z')

所以繪製多條弧線的話,可以具體的線具體分析,然後分別繪製,如:

%% 繪製球面上兩點的圓弧 ellipsoid函式用於繪製橢球

% x^2+y^2 + z ^2 = R

R = 1; % 半徑

center = [0,0,0];% 球心

[x, y, z] = ellipsoid(center(1),center(2),center(3),R,R,R,30);

figure

surf(x, y, z,'LineStyle','none','Facealpha',0.2)

axis equal

hold on

% 畫兩點之間的圓弧,其實理想狀況下是Z=0平面上的Y<0圓弧,

% x^2+y^2= R

% line1

p1=[1,0,0];

p2=[0,-1,0];

plot3(p1(1),p1(2),p1(3),'ro')

plot3(p2(1),p2(2),p2(3),'ro')

xx=linspace(p1(1),p2(1),50);

zz=0.*xx;

yy=center(2)-sqrt((R^2)-((xx-center(1)).^2)-((zz-center(3)).^2));

plot3(xx,yy,zz,'r-')

% line2

p1=[1,0,0];

p2=[0,0,1];

plot3(p1(1),p1(2),p1(3),'ro')

plot3(p2(1),p2(2),p2(3),'ro')

xx=linspace(p1(1),p2(1),20);

yy=linspace(p1(2),p2(2),20);

zz=center(3)+sqrt((R^2)-((xx-center(1)).^2)-((yy-center(2)).^2));

plot3(xx,yy,zz,'r-')

xlabel('X')

ylabel('Y')

zlabel('Z')

如何用matlab在圓區域畫出50個隨機點並將它們標記出來?

lidf clc,close all,clear all sc 1.3 定義縮放係數 xy tra 3 定義標籤平移距離 r 300 定義圓的半徑 num pt 50 定義資料點個數 randr r rand num pt,1 生成隨機點 phi 2 pi 0 rand num pt,1 生成隨機角...

通過亥姆霍茲方程是如何推導出球面波表示式的?

首先寫下球座標系下的亥姆霍茲方程 由於是球座標系,利用球諧函式分離變數作試探解 代入方程得到徑向的方程為 做乙個標度變換得到,得到球貝塞爾方程 再做變換,帶回球貝塞爾方程得到 這就是在柱座標和平面極座標下常見的貝塞爾方程.不過在柱座標下常見的是整數階的貝塞爾方程,這裡是階的貝塞爾方程.顯然可以定義球...

如何用Matlab 畫達芬方程?

馬遠馳 樓上已經給出了完整解法,我用Julia也求解了一遍,樓主可以作為參考。using DifferentialEquationsusing Plots function dydt dy y,p t delta alpha beta gamma omega p dy 1 y 2 dy 2 delt...