Algorithm 复制四边形内像素的有效算法是什么?

Algorithm 复制四边形内像素的有效算法是什么?,algorithm,graphics,bitmap,computational-geometry,Algorithm,Graphics,Bitmap,Computational Geometry,我有两个位图,只有当像素位于由四个角(四边形)定义的区域内时,我才想将像素从A复制到B。位图A和B的大小相同,四边形定义为图像像素空间中的四个{x,y}坐标 最坏的情况下,我可以测试每个像素的中心对四,看看像素的中心是否在四,但这是非常缓慢的。什么是更好的算法 如果四边形是凸的,可以使用以下算法: 短版本:对于每个扫描线(水平位图线),找到与该扫描线相交的边,并复制它们之间的像素 长版本:逐扫描线扫描。从顶部顶点(最小y)开始,跟踪左右两侧的边。对于每个y值,计算两条边的x值(直接使用直线方程或

我有两个位图,只有当像素位于由四个角(四边形)定义的区域内时,我才想将像素从A复制到B。位图A和B的大小相同,四边形定义为图像像素空间中的四个{x,y}坐标


最坏的情况下,我可以测试每个像素的中心对四,看看像素的中心是否在四,但这是非常缓慢的。什么是更好的算法

如果四边形是凸的,可以使用以下算法:

短版本:对于每个扫描线(水平位图线),找到与该扫描线相交的边,并复制它们之间的像素

长版本:逐扫描线扫描。从顶部顶点(最小y)开始,跟踪左右两侧的边。对于每个y值,计算两条边的x值(直接使用直线方程或使用)。然后将(xLeft,y)到(xRight,y)处的像素复制到第二个位图

到达边末端的顶点时,切换到与该顶点连接的另一条边。继续此操作,直到到达底部顶点


对于凹形四边形,这更为复杂。可以使用类似的算法,但对于某些扫描线,将有四条边与扫描线相交。在这种情况下,需要复制边#1到#2和#3到#4之间的像素(边按x值排序)。另一种选择是将四边形分割成两个三角形,并对其使用上述算法。

我同意。我以前用过这种技术。如果需要重复复制相同的四边形,扫描线结果可存储在(y,x1,x2)列表中,其中y是扫描线的行索引,x1和x2是每个扫描线段的起点和终点。