在我的自定义形状多边形jpgraph中填充渐变颜色

时间:2015-04-29 06:05:00

标签: php gd draw jpgraph

我正在使用jpgraph并创建雷达图表。

使用渐变颜色填充自定义形状多边形时遇到问题。

我有一个功能来填充一个平底的渐变颜色多边形,我想填充自定义形状多边形中的渐变颜色。 谁能帮我?我怎么能这样做?

当前输出:

enter image description here

期望的输出:

enter image description here

您可以在此处找到渐变类。

http://code.google.com/r/linksoftafrica-maison-george/source/browse/libs/jpgraph/jpgraph_gradient.php

// Fill a special case of a polygon with a flat bottom
// with a gradient. Can be used for filled line plots.
// Please note that this is NOT a generic gradient polygon fill
// routine. It assumes that the bottom is flat (like a drawing
// of a mountain)
function FilledFlatPolygon($pts,$from_color,$to_color) {
    if( count($pts) == 0 ) return;

    $maxy=$pts[1];
    $miny=$pts[1];          
    $n = count($pts) ;
    for( $i=0, $idx=0; $i < $n; $i += 2) {
        $x = round($pts[$i]);
        $y = round($pts[$i+1]);
        $miny = min($miny,$y);
        $maxy = max($maxy,$y);
    }

    $colors = array();
    $this->GetColArray($from_color,$to_color,abs($maxy-$miny)+1,$colors,$this->numcolors);
    for($i=$miny, $idx=0; $i <= $maxy; ++$i ) {
        $colmap[$i] = $colors[$idx++]; 
    }

    $n = count($pts)/2 ;
    $idx = 0 ;
    while( $idx < $n-1 ) {
        $p1 = array(round($pts[$idx*2]),round($pts[$idx*2+1]));
        $p2 = array(round($pts[++$idx*2]),round($pts[$idx*2+1]));

        // Find the largest rectangle we can fill
        $y = max($p1[1],$p2[1]) ;
        for($yy=$maxy; $yy > $y; --$yy) {
            $this->img->current_color = $colmap[$yy];
            $this->img->Line($p1[0],$yy,$p2[0]-1,$yy);
        }

        if( $p1[1] == $p2[1] ) continue; 

        // Fill the rest using lines (slow...)
        $slope = ($p2[0]-$p1[0])/($p1[1]-$p2[1]);
        $x1 = $p1[0];
        $x2 = $p2[0]-1;
        $start = $y;
        if( $p1[1] > $p2[1] ) {
            while( $y >= $p2[1] ) {
                $x1=$slope*($start-$y)+$p1[0];
                $this->img->current_color = $colmap[$y];
                $this->img->Line($x1,$y,$x2,$y);
                --$y;
            } 
        }
        else {
            while( $y >= $p1[1] ) {
                $x2=$p2[0]+$slope*($start-$y);
                $this->img->current_color = $colmap[$y];
                $this->img->Line($x1,$y,$x2,$y);
                --$y;
            } 
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在我看来,您当前的代码不适合此任务。您需要Gouraud阴影三角形(三边形多边形)的代码。

如果有代码,只需绘制三个三角形,其中三角形的点位于图形的中心,两个点位于雷达轴上。

不幸的是,我没有为jpgraph找到现成的代码。