绘制三角函数

时间:2013-06-02 07:37:58

标签: php

我遇到了一些我想要完成的事情,而不使用互联网上的任何框架或其他图形工具,这些图形工具仅使用PHP绘制三角函数,如果需要,还可以使用SQL。我知道GD库,但没有一个功能有用。我写了一个小脚本,虽然它也没有用。我的目标是做到以下几点:

  1. 允许将trig函数名称,起始值和结束值添加为参数。
  2. 检查函数是cos,tan还是sin。
  3. 循环显示以度为单位的给定起始值和结束值的所有值,并转换为弧度。
  4. 如果需要,将所有值“添加”到数组中,并绘制给定点的函数。
  5. 在循环遍历函数的所有值之后,需要做什么来绘制函数图?值必须是单独的数组吗?需要使用哪些函数进行绘图?

    <?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可以实现。

1 个答案:

答案 0 :(得分: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像素宽,因此如果您想要绘制更宽的范围,或者如果您想绘制300 - 600度,它将会刚开始进入你的图形区域。

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

无论如何,它只是一个示例功能,对吧?但是将度数值用作x坐标(根据图形区域调整),根据所选函数计算y坐标,度数值和绘图区域大小,然后在点之间绘制线条应该有效。