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 坐标,然后对下一个度数值进行相同的计算,然后在这两点之间画一条线。

它有点笨拙,所以我相信你会想把它清理一下。此外,您还需要考虑图表的宽度(我在此处发布的内容将停止在 500 px 宽,所以如果您想绘制更宽的范围,或者如果您想绘制 300 - 600 度,它将刚开始到你的绘图区域的一半。

您还在 for 循环中定义了图像和颜色,我对其进行了更改,因此您不会在每一步都重新创建图像资源并丢失所有以前的数据。

无论如何,这只是一个示例函数,对吧?但是使用您的度值作为 x 坐标(根据您的图形区域大小调整),根据所选函数、度值和您的图形区域大小计算 y 坐标,然后在点之间画线应该可以工作。

于 2013-06-02T13:08:18.173 回答