« Foobar2000程序员耳机简装版装配 | 首页 | 开源web压力测试工具siege和webload »

学用PHP+GD画五角星

  前两天和朋友们出去玩,饮酒过度,躺在旅馆里很是狼狈,朋友和我一起聊天,说起了画五角星的事情,回来试了一下,发现自己中学的几何居然忘得快一干二净了,原来自己丢人的事不只是喝得高了又高...

  我的基本想法是这样滴,取一个以r为半径的圆的内接正五边形的五个顶点的坐标,然后把相隔的点连接起来就成。虽然写出这个很幼稚,但不会就得学啊,这样俺才能从不知道变成知道...

Example:

http://www.vetcafe.net/vtt/fivestar.php

Code:

 

<?php
class FiveStar
{
    var $p = array();
    function FiveStar($a, $b, $r, $d)
    {
        for ($i=0; $i < 5; $i++)
        {
            $this->p[$i]['x'] = $r * cos(2*pi()/5*$i - deg2rad($d)) + $a;
            $this->p[$i]['y'] = $r * sin(2*pi()/5*$i - deg2rad($d)) + $b;
        }
    }

    function draw($image, $color)
    {
        imageline($image, $this->p[0]['x'], $this->p[0]['y'], $this->p[2]['x'], $this->p[2]['y'], $color);
        imageline($image, $this->p[1]['x'], $this->p[1]['y'], $this->p[3]['x'], $this->p[3]['y'], $color);
        imageline($image, $this->p[2]['x'], $this->p[2]['y'], $this->p[4]['x'], $this->p[4]['y'], $color);
        imageline($image, $this->p[3]['x'], $this->p[3]['y'], $this->p[0]['x'], $this->p[0]['y'], $color);
        imageline($image, $this->p[4]['x'], $this->p[4]['y'], $this->p[1]['x'], $this->p[1]['y'], $color);
    }
}
$image = imagecreatetruecolor(2000, 2000);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
for ($i=0; $i < 10; $i++)
{
    $star[$i] = new FiveStar(1000, 1000, 1000 * pow(0.382, $i), 18 + 36 * $i);
    $star[$i]->draw($image, $black);
}
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>


引用:

本篇引用地址:
http://www.vetcafe.net/cgi-bin/mt3/mt-tb.cgi/2554

评论:

还是很厉害哦,佩服的说!

好久没聊了,呵呵……

发表评论

(如果您以前没在这里发表过评论,也许您发表的评论需要Blog主人的审核才能显示在这里,感谢您的静候。)