2012-01-17 105 views
2

有没有一种有效的算法来寻找一般椭圆中像素的标记?光栅化椭圆

本质上,我想要做的是在二维数组中找到对应于参数化椭圆的标记,该参数化椭圆跨越可能数组标记的“2D表面”。 这个问题可以像上面我的第一个Q那样与椭圆的光栅化进行比较。

我发现了一些扫描线算法,可以做我想要的轴对齐的椭圆,但是现在我想知道是否有任何偏斜和旋转的椭圆。必须有矢量图形SW在那里设法填补倾斜和/或旋转的椭圆。

要clearify我的意思,我最近有这一个类似的问题在这里得到解决:Special polygonial for loop in two dimensional array

/尼克

回答

1

你可以把你已经找到了光栅化椭圆的算法和简单应用旋转或倾斜变换到坐标,然后测试它们是在椭圆内部还是外部。例如,如果你想测试一个椭圆形旋转45度,你可以做这样的事情:

for (x = 0; x < maxX; x++) 
{ 
    for (y = 0; y < maxY; y++) 
    { 
     double newX, newY; 
     Transform (x, y, rotationMatrix, &newX, &newY); 
     if (PointInEllipse (newX, newY, ellipse)) 
     { 
      ...do whatever here.... 
     } 
    } 
} 

如果简单地变换应用于2x2的旋转矩阵x和y,并将结果在下一页末,newY。

0

我会建议使用标准三角形填充例程对三角形进行三角测量,因为OpenGL和DirectX往往只能在一天结束时绘制三角形,所以几率很好,大多数图形API都是如此。 。

椭圆的简单三角测量看起来像比萨,除了向外缩放外。如果你需要更高的质量,你只需要增加比萨饼的切片数量。