特別感謝
B站作者@基山督的 視頻及源代碼
相關推薦
三維心心代碼
hn=figure('name','心心心','color','k'); %創建一個界面,名字是心心心,界面背景是黑色
[x,y,z]=meshgrid(linspace(-3,3)); %做出網格,linspace生成-3到3之間的數值,默認100個。
F=((-(x.^2) .* (z.^3) -(9/80).*(y.^2).*(z.^3)) + ((x.^2) + (9/4).* (y.^2) + (z.^2)-1).^3); %笛卡爾座標系下的心型函數,隱函數。高數書附錄裏有
isosurface(F,0); %基於指定的0處的體數據 V 計算等值面數據
lighting phong %光照模式。
axis equal %等比座標軸
axis off %去除座標軸
%brighten(0); %增加亮度
a=[1 1 1];
colormap(a); %設置心心的顏色和a代表的rgb顏色相同
view([0 1800]); %代表打開時的視角
練習三維球
T1=figure('name','xiazuo','color','w'); %設置一個名爲“正方體”的窗口,背景顏色爲黑色
[x,y,z]=meshgrid(linspace(-3,3));
F=(x.^2+y.^2+z.^2+x+y+z);
isosurface(F,0); %隱函數繪圖
lighting phong%不要加“;”
axis equal%不要加“;”
axis off%不要加“;”
A=[0 1 1];
colormap(A);
view([30,90]);
一、isosurface
isosurface函數可以畫隱函數的等值曲線或曲面
二、meshgrid
於生成網格採樣點的函數。在使用MATLAB進行3D圖形繪製方面有着廣泛的應用。
三、光源位置及照明模式
在繪製帶光照的三維圖像時,可以利用light命令與lightangle命令來確定光源位置。
1.light函數
- 函數調用:light(‘color’, s1, ‘style’, s2, ‘position’, s3)
- 含義:其中color、style與position的位置可以互換,s1,s2,s3爲相應的可選值。例如light(‘position’,[1 0 0])表示光源從無窮遠處沿x軸向原點照射過來。
2.lightangle函數
- 函數調用:
-
- lightangle(az,el): 在由方位角和仰角確定的位置放置光源
-
- light_handle= lightangle(az,el) :創建一個光源位置並在light_handle中返回light的句柄
-
- lightangle(light_handle,az,el) :設置由light_handle確定的光源位置
-
- [az,el] = lightangle(light_handle) :返回由light_handle確定的光源位置的方位角和仰角
3.lighting照明函數
- lighting flat :在對象的每個面上產生均勻的燈光。選擇此方法可查看鑲嵌面對象。
- lighting gouraud :計算頂點法線並沿面進行線性插值。選擇此方法可查看曲面。
- lighting phong :在每個面上插值頂點法線並計算每個像素處的反射率。選擇此選項可查看曲面。Phong lighting通常比Gouraud lighting產生更好的效果,但渲染需要更長的時間
- lighting none :關閉照明
四:均分計算指令
- 調用函數:
-
- logspace(a, b, n):生成一個數組,數據的第一個元素值爲a,最後一個元素爲b,n是總採樣點數。需要注意的是,此時產生的數組元素在10a到10b上並不是均勻分佈的,而形成一個對數曲線。
-
- logspace(x1,x2):用於產生x1,x2之間的N點行線性的矢量。