|
工程相關領域的行業,通常少不了面對函式繪圖,現在有許多的軟體都可以使用更方便的功能來繪製複雜的函式圖形,如著名的Matlab。
在這邊介紹三維立體空間的函式繪製,將函式分為兩類:「顯函式」與「隱函式」。
顯函式
如果可以將函式表示為y = f(x, z) 的形式,這種函式稱之為顯函式,由於顯函式的(x,z)只會產生一個結果,所以顯函式所表示的圖形若使用一條與y軸平行的直線來與圖形相交,最多只有一個交點。
繪製顯函式的方法就是分別對x與z進行迴圈計數,並帶入原方程式求出y值,然後在螢幕上繪出(x, y)的對應圖(z = f(x, y)或x = f(y, z)只是換個角度繪圖,方法一樣)。
隱函式
如果函式是f(x, y, z) = 0的形式,稱之為隱函式,雖然y - f(x, z) =
0也可以算是屬於此種形式,不過這邊所說的隱函式是指那些無法化為y = f(x,
z)形式的函式;當畫上一條與y軸平行的直線時,可能會發生幾個情況,例如以球面函式x^2 + y^2 + z^2 - 1 =
0來說,可能沒有交點、一個交點或是兩個交點,如下圖所示:

由於一對(x, z)值可能會有兩個交點,所以我們必須將隱函式設法改變為以下的形式才能進行繪圖:
x = x(s, t)
y = y(s, t)
z = z(s, t)
以上的形式稱之為參數式,之後我們就可以利用(s, t)進行迴圈計數並計算出(x, y, z)的值並進行繪圖,當然(x, y, z)的參數式代回原來的函式必須滿足原來的函式,以球面函式x2 + y2 + z2 - 1 = 0為例,較好的參數表示式當然就是極座標表示法。
大部份的隱函式都可以使用參數式來進行繪圖,不過不同的函式會需要不同的參數式,以下示範顯函式的繪圖:
package onlyfun.caterpillar; import java.awt.Color; import java.awt.Graphics; import javax.swing.JApplet; public class FunctionGraphicDemo extends JApplet { private int orgX; private int orgY; public void init() { super.init(); setBackground(Color.black); orgX = (int)getSize().width /2; orgY = (int) (getSize().height / 2); } public void paint(Graphics g) { g.setColor(Color.yellow); // 從斜角繪製 // 繞 x 軸轉 30 度,繞 y 軸轉 -30 度 double angleX = Math.toRadians(30); double angleY = Math.toRadians(-30);
for(int z = 200; z >= -200; z-=10) { for(int x = -200; x <= 200; x++) { double y = 30*(Math.cos( Math.toRadians( Math.sqrt(x*x+z*z))) + Math.cos( Math.toRadians(3 * Math.sqrt(x*x+z*z))); // 立體旋轉,從斜角繪製,調整繪圖中心至視窗中心 int pointX = (int) (orgX + x*Math.cos(angleY) + z*Math.sin(angleY)); int pointY = (int) (orgY - (y*Math.cos(angleX) - (-x*Math.sin(angleY) + z*Math.cos(angleY)) * Math.sin(angleX))); g.drawLine(pointX, pointY, pointX, pointY); } } } }
 |