在我的模拟器中,我试图检查弧的每个像素。中心(x& y),半径和弧的角度(半径,currentAngle和newAngle)有固定的协调,所以我能够用颜色填充它以向用户表示它。但此外我需要对覆盖的像素执行一些操作。 我试过的是:
for (int i = 0; i < newAngle; i++)
for (int j = 0; j < radius; j++) {
Point point = new Point((int)(x + j * Math.cos(currentAngle - Math.toRadians(i))), (int)( y + j * Math.sin(currentAngle - Math.toRadians(i))));
check(point.x, point.y);
我认为改变角度和半径是很好的,但是,正如我后面所理解的那样,由于弧的边界上的每个度数都包含超过1个像素,所以很多像素都会被遗漏。
我尝试在网上搜索并找到了一些方法来浏览圈子的每个像素。没有设法将其转换为圆弧像素。
答案 0 :(得分:1)
您可以从极坐标切换到笛卡尔并迭代属于段的点:
double curCos = Math.cos(currentAngle);
double curSin = Math.sin(currentAngle);
double curTan = curSin/curCos;
double newCos = Math.cos(newAngle);
double newSin = Math.sin(newAngle);
double newTan = newSin/newCos;
double xMax = curCos*radius
double r2 = radius*radius
for(int i=0; i < xMax; i++) {
for(int j=curTan*x; j < newTan*x; j++) {
if(i*i + j*j > r2) {
continue;
}
Point point = new Point(x + i, y + j);
}
}
此代码段仅涵盖newAngle&gt; currentAngle和整个片段位于第一象限(x> 0和y> 0的区域)的情况,但您可以了解如何迭代点以及如何将解决方案概括为任何角度组合。
答案 1 :(得分:1)
你需要光栅化弧 - 按顺序获取所有彩色像素。着名的Bresenham algorithm for circle旨在实现这一目标。只需调整它以仅绘制圆圈所需的部分 还有另一种选择 - Midpoint circle algo