小弟在做一个简单的图形填充程序。
现在在做渐变填充。主要功能类似于GDI+中的线性渐变和路径渐变填充。对于路径渐变填充的想法是这样的:比如一个路径为一个矩形ABCD,其中心点为O.
我把他们分成4个小三角形来进行填充。就是对角线分开的四个三角形。
现在的问题是,对于每一个位于矩形内的像素,在对其渲染之前,都要判断他是在哪个三角形内?当然,矩形只是一个特殊的路径,其他的多边形以及椭圆等,其分成的三角形是相当多的。所以需要寻求一个速度非常非常快的算法来判断某点(x,y)位于哪个三角形内。已经想到的方法是:
1:实现计算出所有三角形围绕中心点的所有角度,然后求出当前点到中心点的斜率后计算其角度,判断落于哪个三角形中。但是在处理每个点的时候都要用atan函数,其效率是相当底的。
2:依次把路径的各个定点和当前点做向量叉乘,每个三角形需要两个向量叉乘。在像素点非常多的情况下,这似乎也太慢了。所以,请教个位高手,给定一个中心点,以及围绕这个中心点的三角形。
然后在给定点(x,y)的情况下,如何快速判断其位于哪个三角形的角度范围内?不知偶说清楚没。希望各位理解。谢过个位先。

解决方案 »

  1.   

    BOOL PtInRegion( int x, int y ) const;BOOL PtInRegion( POINT point ) const;
      

  2.   

    不能调用windows的东西的。
      

  3.   

    比较取巧的办法,先确定中心点,然后确定分界线,把整个区域分成上下左右4部分,现在看 "上"这部分过中心点做一条水平线, 和分界线交角为 角b
    根据角b 可以求得分界线是 横向移动多少个象素 竖直方向才移动一个象素
    比如角度如果是atan2,那么就是横向移动一个象素,竖直移动2象素,就可以
    for(x=中心;x<宽度;x++){
    for(y=中心;y<宽度;y=y+2){
    这点颜色 = 某颜色;
    }
    }
    依此类推.