计算y和宽度,就像Google日历一样

时间:2012-11-16 09:51:17

标签: php algorithm

在PHP中,我试图弄清楚如何有效地计算X和宽度中的位置。

给定的是一个以像素为单位的数组。但它们都具有相同的宽度和y。因此,当在同一时期,它们将相互叠加。我希望它们更小,并且基于相关的其他块在正确的Y位置。

对于示例中的星期五,数组以这种方式启动:

{
   "2013-01-11":[
      {
         "width":114,
         "left":0,
         "top":260,
         "height":100
      },
      {
         "width":114,
         "left":0,
         "top":300,
         "height":100
      },
      {
         "width":114,
         "left":0,
         "top":360,
         "height":100
      },
      {
         "width":114,
         "left":0,
         "top":400,
         "height":100
      }
    ]
}

在打印屏幕中,您可以看到我想要的样子。一个块在同一时间段内也可以有3个或更多块。

current situation

2 个答案:

答案 0 :(得分:0)

两种天真的方法是通过基于一天(08:00,08:30,09:00等)的谨慎步骤保持查找表,或通过检查来跟踪哪些时间繁忙同一天的所有先前事件,并以这种方式检测重叠。

由于一天的事件数量和谨慎间隔的数量都相当低,我认为一种天真的方法可以正常工作,以后可以轻松理解。

这假设事件按开始时间排序。

在伪代码/ pythonish中:

intervals = []

for event in events:
    time = event['starttime']
    columnoffset = 0

    while (time < event['endtime']):
        # check if this time space already has events assigned
        if (intervals[time] and columnoffset < intervals[time]):
            columnoffset = intervals[time]

        # count the event
        intervals[time]++

        # increment time bin
        time += discreet_step_size

    # set new x position based on how many columns were busy within this interval
    event['x'] = event['x'] + columnoffset * xoffset

答案 1 :(得分:-1)

/ *使用GD库* /

$ IM = imagecreatefromjpeg( “imagename.jpg”);

$w = imagesx($im);
$h = imagesy($im);

echo "width of page=".$w."</br>";//width of whole page
echo "height of page=".$h."</br>";//height of whole page

//reading pixels by pixels
for($i=0;$i<$w;$i++){

for($j=0;$j<$h;$j++){

        $rgb = imagecolorat($im,$i,$j);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;

        //comparing the value of rgb if found then excute  
        if ($r= && $ $g= && $b=)
        {
                   apply condition here;   
        }
    }
 }