我遇到了问题。我正在尝试使用中点算法栅格化圆的一部分。该部分由startAngle,endAngle输入。
在谷歌的帮助下,我做到了这一点:
public RasterImage<PixelType> rasterizeCircleSector(RasterImage<PixelType> img,
double centerX, double centerY,
double x, double y,
int startAngle, int endAngle,
PixelType value){
RasterImage<PixelType> result = img;
int angle = (int)toDegrees(atan2(y, x));
if(x<y) {
if (90 - angle >= startAngle && 90 - angle <= endAngle) {
result.withPixel((int) (centerX - y), (int) (centerY - x), value);
}
if (angle >= startAngle && angle <= endAngle) {
result.withPixel((int) (centerX - x), (int) (centerY - y), value);
}
if (180 - angle >= startAngle && 180 - angle <= endAngle) {
result.withPixel((int) (centerX + x), (int) (centerY - y), value);
}
if (angle + 90 >= startAngle && angle + 90 <= endAngle) {
result.withPixel((int) (centerX + y), (int) (centerY - x), value);
}
if (270 - angle >= startAngle && 270 - angle <= endAngle) {
result.withPixel((int) (centerX + y), (int) (centerY + x), value);
}
if (angle + 180 >= startAngle && angle + 180 <= endAngle) {
result.withPixel((int) (centerX + x), (int) (centerY + y), value);
}
if (360 - angle >= startAngle && 360 - angle <= endAngle) {
result.withPixel((int) (centerX - x), (int) (centerY + y), value);
}
if (angle + 270 >= startAngle && angle + 270 <= endAngle) {
result.withPixel((int) (centerX - y), (int) (centerY + x), value);
}
}
return result;
}
Angles工作正常,但问题是,我不知道如何光栅化圆上的每个点(此代码光栅化只有8个点)
通话功能:
rasterImage = linerCircle.rasterizeCircleSector(rasterImage,200,200,
15, 30,
1, 200,
0xf0f0f0);
结果是:
任何人都可以帮助我吗?或者这种方法完全错了?
谢谢。
答案 0 :(得分:0)
中点(和Bresenham)算法通常填充圆的一个八分圆(有时是一个象限),镜像点以填充其他八分圆。
首先,您需要确定 - 八分圆的开始和结束角度是什么,以及完全填充的八分圆(如果存在)。
然后获得开始和结束角度的x / y限制。
然后应用中点算法,省略位于计算的x / y限制之外的点并填充圆的所需部分。