上次用Geogebra果然還是太陽春了,這次用matlab,優點是可以非常精細,缺點是超過40條線就要算蠻久了(除非容許比較低的精細程度),所以選擇了跟上次不同的曲線。
成果(6232x6560)(SVG檔)
程式碼:
clf
hold on % 不hold的話你算老半天只會plot出一條
axis off % 不關掉座標軸的話輸出就會有軸
for a = -9:0.2:11 % 這樣總共有101條線。
f = @(x,y) x.^3 - x.^2*y + a.*y.^2*x - y.^3 - x + y;
if a >= 1 % 讓線條顏色從黑色漸進到紅色。
plot_color = [(a-1)/10 0 0];
end
if a < 1 % 讓線條顏色從藍色漸進到黑色。
plot_color = [0 0 (1-a)/10];
end
fimplicit(f,[-2 2 -2 2],MeshDensity=1500,color=plot_color,LineWidth=0.1)
% MeshDensity預設是151,基本上已經不錯看了,只在(數學)性質不好的地方會有點數值不穩。
% 請注意,1500會跑很久,我大概跑了一小時。
% 可以先用較低的參數跑跑看覺得滿意再拉高。
end
set(gcf,"Renderer","painters") % 強制用painters渲染,不然太精細的圖matlab會自動給你輸出成點陣。
saveas(gcf,'file_name','svg') % 想輸出成.eps的話檔名要用'epsc'否則會只有灰階。
% 然後輸出的結果可能還會跟你的「圖片預覽視窗」的設定有關,也是要花時間微調的,這部分我不是很懂。
基本上這個圖就是曲線
x^3 - x^2*y - 9*y^2*x - y^3 - x + y = 0
漸進到
x^3 - x^2*y + 11*y^2*x - y^3 - x + y = 0
的某種視覺化,特別的是
當a = 1時,這個曲線的圖形就是一個圓跟一條斜直線,
因為它可以因式分解成(x^2+y^2-1)(x-y),
x^2+y^2-1 = 0的解就是單位圓,x-y = 0的解就是斜直線,
所以當你的點落在單位圓或斜直線上時,x^2+y^2-1或x-y就會等於0,
因此就是(x^2+y^2-1)(x-y) = 0的解。