PHP函数绘制以相同位置为中心的几个八边形

时间:2015-12-31 13:28:31

标签: php geometry gd polygon

我正在使用基于PHP GD的Web应用程序,我需要一些多边形绘图方面的帮助。

我有一个可以绘制n边多边形的函数。在这种情况下,我只对绘制八边形感兴趣。

简化函数如下所示:

function drawoctagon($ourimage,$xpoint,$ypoint,$radius,$color){

    $sides= 8;
    $points = array();
    for ($i = 1; $i <= $sides; $i++) {
        $points[] = round( $radius * cos($i*2 * pi() / $sides) + $radius +$xpoint);  // x
        $points[] = round( $radius * sin($i*2 * pi() / $sides) + $radius  + $ypoint);  // y
    }

    imagefilledpolygon($ourimage, $points, $sides, $color);

}

//////////////////////////

我以这种方式调用此函数:

drawoctagon($png1,$xpoint,$ypoint,$radius,$linecolor44);

但假设我执行此行超过3次,所有不同的半径,八边形不是同心的......它们是并排的等等。

创建$ points数组时,我分别添加了+ $ xpoint和$ ypoint,以从创建它的左上角移动绘制的八边形。

我希望我已经妥善解释了......但基本上,我的问题是:  如何重新编写此函数来绘制CONCENTRIC八边形,这样如果使用相同的xpoint和ypoint(作为多边形的中心)多次调用它,尽管改变半径,它将创建以同一点为中心的八边形。

如果您仍然可以针对任何n边多边形调整该函数,则可以获得额外的分数。

非常感谢!

1 个答案:

答案 0 :(得分:0)

你的八角形的中心是你的功能

image_tag 'some-image'

您可以尝试从中心表达式

中删除$ radius
image_tag 'some-image.svg'

并在您创建的每个多边形中输入相同的long a = 9965535; if (setsockopt(camm, SOL_SOCKET, SO_RCVBUF, (const char*)&a, sizeof(long)) == -1) { fprintf(stderr, "Error setting socket opts: %s\n", strerror(errno)); } do{ Siz = recvfrom(camm, message, 1300, 0, (struct sockaddr *) &cam, &caml); image(message, Siz); aab++; if (aab > 1000){ // memset((char *)&ap, 0, 65535);// &ap, 65535 //ap = "1288"; // memset(&a, 0, 9965535); // *loc = 9965535; // memset(loc, 0, 9965535); aab = 0; } } while (Siz > 0); x=$radius+ $xpoint y=$radius+$ypoint