2011-04-12 7 views
0

PHP(GD、もちろん)ではさまざまな機能を描画する際に問題があります。 私は別の関数を描くことができましたが、関数のパラメータが変わるたびに関数は変化します。 私は、最初の関数y = x^2を持ち、それを-5から5まで描く必要があるとしましょう。つまり、最初の点は(-5; 25)になります。私がそれを知っていれば、私はそれを私が望むあらゆる点に動かすことができます。しかし、y = 2x^2を間隔x =( - 5; 5)で選ぶと、最初のポイントは(-5; 50)です。だから私はどのように関数を移動するかを計算するのに助けが必要だとしましょう(0; 0)。 関数は放物線/カテナリーです。特定の点から始まる描画関数

+0

サンプルコードがありますか? – Yoshi

答えて

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; 

はその後、あなたは座標にシフト値を追加することで、各1をシフトするかを決定することができます。

<?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)の矩形に収まるように正規化します。たぶん、あなたはまた、特定のサイズでそれを得るために、図を拡大縮小する必要があります。

関連する問題