2011-04-12 25 views
0

我有一個問題,用PHP繪製不同的函數(當然是GD)。 我設法畫出不同的功能,但每當函數的參數發生變化時 - 函數浮動到任何需要的位置。 讓我們說,我有第一個函數y = x^2,我必須從-5到5繪製它。這意味着第一個點將在(-5; 25)。如果我知道這一點,我可以將其移至任何我想要的地方。但是如果我選擇y = 2x^2,間隔x =( - 5; 5)。第一點是(-5; 50)。所以我需要幫助計算如何移動任何函數,比方說,(0; 0)。 功能是拋物線/懸鏈線。從一個特定點開始的繪圖函數

+0

你有一些示例代碼? – Yoshi 2011-04-12 15:23:50

回答

1

你想要做的是找到你正在製作的圖形的最大邊界。要做到這一點,你必須檢查每個拐點以及範圍界限。將每個座標對存儲在一個數組中

第1部分[範圍界限]: 從範圍邊界收集座標。

<?php 
$ybound[] = f($minX); 
$ybound[] = f($maxX); 

第2部分[屈折]: 這部分是比較困難的。你可以有一系列的方程來解決每種拋物線的變形,或者你可以蠻橫的強迫它。要做到這一點,只是選擇一個小的增量,(什麼都你的小增量繪製的線),我將使用0.1

<?php 
for($x = $minX; $x <= $maxX; $x += 0.1) { 
    $ybound[] = f($x); 
} 

注意,如果蠻力,你可以跳過第1部分,否則,如果你能夠計算出項目範圍的變化,那麼速度會更快

第3部分[最小最大值]: 現在您可以從可能的y值數組中獲得最小值和最大值。

<?php 
$minY = min($ybound); 
$maxY = max($ybound); 

第4 [SHIFT]: 既然你有這樣的,應該進行調整非常簡單。通過將每個新座標調整爲該值,將左上角設置爲0,0。

<?php 
$shiftX = -$minX; 
$shiftY = $maxY; 

有了這個信息,你也可以決定你的圖像大小

<?php 
$imageX = $maxX - $minX; 
$imageY = $maxY - $minY; 

然後爲你生成你的座標,你將轉向各一臺,通過加入移動價值座標。

<?php 
for($x = -$minX; $x <= $maxX; $x += 0.1) { 
    $ycoor = $shiftY - f($x); 
    $xcoor = $x + $shiftX; 
    //draw ... 
} 

繪製軸也很容易,

<?php 
$xaxis = $shiftY; 
$yaxis = $shiftX; 

(我想我有我所有的跡象正確的。原諒我,如果他們關閉)

0

您首先需要確定邊界框你的功能。然後,計算寬度和高度,然後對其進行標準化,使其適合左上角座標爲(0,0)的矩形。也許你還需要將這個數字調整到特定的大小。

相關問題