今天用php写了点东西,其中一个就是画时钟,记下来分享下。
php的gd库里用来绘图还是很不错的。绘制时针分针使用imagefilledpolygon(),绘制表盘刻度线用imageline(),关键在于确定那些点的位置。
没仔细查资料,对php也不太了解,不知道有没有矩阵变换之类的东西,还是自己写吧。
先定义一个平面点集的旋转与平移变换函数,传入参数为大小是偶数的array,奇数位为x,偶数位为y,返回变换后的array。这个在绘制时针分针和表盘刻度的时候很有用。
function transform_points_2d($points, $offset, $angle)
{
$result = array();
$size = sizeof($points);
for ($i=0; $i<$size; $i+=2) {
$result[$i] = $offset[0] + $points[$i] * cos($angle) + $points[$i+1] * sin($angle);
$result[$i+1] = $offset[1] -$points[$i] * sin($angle) + $points[$i+1] * cos($angle);
}
//print_r($result);
return $result;
}
假设时针分针都是三角形,考虑简单的情况,都指向上方。然后用上面的函数进行变换就可以得到任意位置的顶点集了。
$hour_points0 = array(
7, 8,
-7, 8,
0, -40
);
$m