0

フレームワークやインターネット上にある他のグラフ作成ツールを使用せずに達成したいことがあります。これは、PHP と必要に応じて SQL のみを使用して三角関数をグラフ化することです。GD ライブラリは知っていますが、役に立たない機能はありませんでした。小さなスクリプトを書きましたが、実際には機能しません。私の目標は、次のことを行うことです。

  1. 三角関数名、開始値、終了値をパラメーターとして追加できるようにします。
  2. 関数が cos、tan、sin のいずれであるかを確認します。
  3. 開始値と終了値を度単位で指定してすべての値をループし、ラジアンに変換します。
  4. 必要に応じてすべての値を配列に「追加」し、ポイントを指定して関数をグラフ化します。

関数のすべての値をループした後、関数をグラフ化するには何をする必要がありますか? 値は別の配列にある必要がありますか? グラフ化にはどの関数を使用する必要がありますか?

<?php

header("Content-type: image/png");

function graphFunction($function, $startDegree, $endDegree)
{

$functionList = array('cos', 'sin', 'tan');

if (strtolower($function) == 'cos')
{
    $cosValues = array();
    for ($c = $startDegree; $c < $endDegree; $c++)
    {

        array_push($cosValues, cos(deg2rad($c)));

        $graph = imagecreatetruecolor(500,250);
            $col_poly = imagecolorallocate($graph, 255, 255, 255);
            imagepolygon($graph, [the cosine values] , 34, $col_poly);
            imagepng($graph);
            imagedestroy($graph); 

       }

   }

}

echo graphFunction('cos', 0, 360);

?>

これはサンプル関数であると想定されているため、データベースに多くのものを保存する方法があるため、役に立たない制御構造を批判する必要はありません。フィードバックをお待ちしております。うまくいけば、PHP でそれが可能になることを願っています。

4

1 に答える 1

1

これは PHP で行うことができます。if ステートメント内で次を試してみましたが、うまくいくようです。

$height = 250;
$offset = $height/2;
$graph = imagecreatetruecolor(500, $height);
$col_poly = imagecolorallocate($graph, 255, 255, 255);

for ($c = $startDegree; $c < $endDegree; $c++)
{
        $this_x = $c;
        $next_x = $this_x + 1;
        $this_y = cos(deg2rad($this_x)) * $offset + $offset;
        $next_y = cos(deg2rad($next_x)) * $offset + $offset;

        imageline($graph, $this_x, $this_y, $next_x, $next_y, $col_poly);
 }

imagepng($graph);
imagedestroy($graph); 

グラフ内のポイントの y 座標を内部に収まるように設定する必要があるため、私が行ったことはグラフの高さを定義することでした。次に、for ループ内で、現在の度の値を x 座標として取得し、y 座標を計算してから、次の度の値についても同じ値を計算し、それらの 2 点間に線を引きます。

少しごちゃごちゃしているので、少し掃除したくなると思います。また、グラフの幅についても考える必要があります (ここに投稿したものは幅 500 ピクセルで停止するため、より広い範囲をグラフ化したい場合、または 300 ~ 600 度をプロットしたい場合は、グラフ領域の途中から始めてください。

また、for ループ内で画像と色を定義しました。これを変更したので、各ステップで画像リソースを再作成して以前のデータをすべて失うことはありません。

とにかく、それは単なるサンプル関数でしたよね? ただし、次数の値を x 座標 (グラフ領域のサイズに合わせて調整) として使用し、選択した関数、次数の値、およびグラフ領域のサイズに基づいて y 座標を計算し、ポイント間の線を描画する必要があります。

于 2013-06-02T13:08:18.173 に答える