快速坐标定位的问题(详细请进)

winnuke 2007-03-16 08:28:02
小弟在做一个简单的图形填充程序。
现在在做渐变填充。主要功能类似于GDI+中的线性渐变和路径渐变填充。

对于路径渐变填充的想法是这样的:

比如一个路径为一个矩形ABCD,其中心点为O.
我把他们分成4个小三角形来进行填充。就是对角线分开的四个三角形。
现在的问题是,对于每一个位于矩形内的像素,在对其渲染之前,都要判断他是在哪个三角形内?

当然,矩形只是一个特殊的路径,其他的多边形以及椭圆等,其分成的三角形是相当多的。所以需要寻求一个速度非常非常快的算法来判断某点(x,y)位于哪个三角形内。

已经想到的方法是:
1:实现计算出所有三角形围绕中心点的所有角度,然后求出当前点到中心点的斜率后计算其角度,判断落于哪个三角形中。但是在处理每个点的时候都要用atan函数,其效率是相当底的。
2:依次把路径的各个定点和当前点做向量叉乘,每个三角形需要两个向量叉乘。在像素点非常多的情况下,这似乎也太慢了。

所以,请教个位高手,给定一个中心点,以及围绕这个中心点的三角形。
然后在给定点(x,y)的情况下,如何快速判断其位于哪个三角形的角度范围内?

不知偶说清楚没。希望各位理解。谢过个位先。

...全文
246 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlzxlich 2007-03-17
  • 打赏
  • 举报
回复
BOOL PtInRegion( int x, int y ) const;

BOOL PtInRegion( POINT point ) const;

aj3423 2007-03-17
  • 打赏
  • 举报
回复
比较取巧的办法,先确定中心点,然后确定分界线,把整个区域分成上下左右4部分,现在看 "上"这部分

过中心点做一条水平线, 和分界线交角为 角b
根据角b 可以求得分界线是 横向移动多少个象素 竖直方向才移动一个象素
比如角度如果是atan2,那么就是横向移动一个象素,竖直移动2象素,就可以
for(x=中心;x<宽度;x++){
for(y=中心;y<宽度;y=y+2){
这点颜色 = 某颜色;
}
}
依此类推.
winnuke 2007-03-17
  • 打赏
  • 举报
回复
不能调用windows的东西的。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧