解決你的第一個問題:首先你需要定義環面座標(看起來很自然!),然後轉換爲笛卡爾座標,這就是MATLAB如何構建所有圖形(除非你正在製作當然是極地圖)。所以我們開始的定義我們的環形座標:
aminor = 1.; % Torus minor radius
Rmajor = 3.; % Torus major radius
theta = linspace(-pi, pi, 64) ; % Poloidal angle
phi = linspace(0., 2.*pi, 64) ; % Toroidal angle
我們只想圓環的一個表面,所以小半徑是標量。我們現在做這些座標的二維網格:
[t, p] = meshgrid(phi, theta);
,並轉換爲3D笛卡爾使用問題鏈接到維基百科頁面上給出的公式座標:
x = (Rmajor + aminor.*cos(p)) .* cos(t);
y = (Rmajor + aminor.*cos(p)) .* sin(t);
z = aminor.*sin(p);
現在我們已經把我們的圓環定義在3D中,我們可以使用surf
繪製它:
surf(x, y, z)
axis equal
編輯:爲了解決第二個問題,這取決於你如何存儲在您的扭曲,而是說你必須在每個環向和極向點來定義一個矩陣,你就只能乘那是小半徑由恆失真。在下文中,我創建一個失真矩陣是相同的尺寸我的環形和極向角座標矩陣和常規發佈約1爲0的FWHM的平均值。1:
distortion = 1. + 0.1 * randn(64, 64);
x = (Rmajor + aminor .* distortion .*cos(p)) .* cos(t);
y = (Rmajor + aminor .* distortion .* cos(p)) .* sin(t);
z = aminor.* distortion .* sin(p);
surf(x, y, z)
其結果是:
+1矢量化這一切,它比我匆匆忙忙的循環更好。 – tmpearce
這正是我所需要的。萬分感謝! –
舊帖子,但我最近使用這個。在八度(我也假設Matlab)衝浪()採取第四個參數的顏色。我發現它幫助我突出瞭如果我稱爲surf(x,y,z,變形)的失真。 – Bovaz