我正在使用基于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边多边形调整该函数,则可以获得额外的分数。
非常感谢!
答案 0 :(得分:0)
你的八角形的中心是你的功能
image_tag 'some-image'
您可以尝试从中心表达式
中删除$ radiusimage_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
。