作者sleeeve (赴美留學的日子...)
看板MATLAB
標題[繪圖] plot3如何把曲面畫出
時間Thu Jan 8 12:35:32 2015
是這樣的,
x是一個(n*1)的向量。
y是一個(n*1)的向量。
z是一個(n*1)的向量。
plot3(x,y,z,'.') 會在3D中畫出n個點。
如果這n個點剛好是一個曲面,如何把它畫成如:
http://ppt.cc/MeC~ 一條線一條線的曲面(semidefinite cone)
或是讓圖看起來像曲面,而不是一堆點
THX
--
╭──╮ 全 q ˙ . 全 ╭════╮
║ 燈 電 世 . 潘 ◤◥◤◥ 陽 街 世 │此路不通│
║││ 了 界 ˙威 在 一 起 建 . 了 界 ╰═ ╤ ═╯
║ 停 都 ‧ 倫 ◣ ◢ 福 . 封 都 │
║ ﹕. ˙ ‧ ‧ │
███ ψsleeeve ███
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 74.94.77.238
※ 文章網址: http://webptt.com/m.aspx?n=bbs/MATLAB/M.1420691737.A.292.html
※ 編輯: sleeeve (74.94.77.238), 01/08/2015 12:37:37
1F:推 kevio: surf ? or surf相關 mesh, surfc ? 01/08 14:44
應該說,如果這些點剛好構成一個實心的cone...但我想畫這個cone的surface.
要怎麼弄呢? surf(x,y,z)好像不行
※ 編輯: sleeeve (74.94.77.238), 01/08/2015 14:57:28
2F:→ geniusturtle: 知道 z = f(x,y) 的話可以用樓上的方法 01/08 17:16
3F:→ geniusturtle: 不知道的話...重新內插? 01/08 17:17
4F:推 Rasin: 1F就是正解了阿 怎麼可能不行 你代碼貼上來 01/08 20:59
5F:→ Rasin: 把xy meshgrid 然後把z分別對應放入矩陣 沒有的改成nan 01/08 21:04
6F:→ Rasin: mesh就出來了 01/08 21:05
7F:推 Rasin: 提供一個偷懶的方法 將z=某個值的xyz全部畫一條線 01/08 21:19
8F:→ Rasin: 但要看誤差可以忍受多少 01/08 21:20
9F:→ YoursEver: 這個case看起來不可能靠surf, mesh之類的來畫, 01/09 13:49
10F:→ YoursEver: 假設你的點夠密,你去matlab help看一下 isosurface 這 01/09 13:49
11F:→ YoursEver: 個function底下的範例成式碼,或許會有用. 01/09 13:49
12F:→ YoursEver: 你的case看起來要從meshing做起; distance transform可 01/09 13:51
13F:→ YoursEver: 以幫你定義cone的內/外部. 01/09 13:51
num = 0;
%% loop
for x = 0 : .1 : 1
for y = -1 : .1 : 1
for z = 0 : .1 : 1
num = num + 1;
A = [x y;y z]; // PSD矩陣
a = eig(A); // 求特徵值
if (a(1) >= 0) && (a(2) >= 0) // 如果兩個特徵值接不小於0,則儲存
vecx(num) = x;
vecy(num) = y;
vecz(num) = z;
else // 否則不儲存其座標值
vecx(num) = NaN;
vecy(num) = NaN;
vecz(num) = NaN;
end
end
end
end
%% picture
figure(1)
plot3(vecx,vecy,vecz,'.')
※ 編輯: sleeeve (74.94.77.238), 01/10/2015 15:07:48
14F:→ sleeeve: 畫出來是實心的@@ 01/10 15:08
條件是矩陣要positive semi-definite,所以用特徵值去判定。
我適用範圍內一個點一個點帶。
※ 編輯: sleeeve (74.94.77.238), 01/10/2015 15:09:45
※ 編輯: sleeeve (74.94.77.238), 01/10/2015 15:26:33