我目前正在使用C ++程序中的中点圆算法绘制圆圈。这是我正在使用的代码示例。
void drawcircle(int x0, int y0, int radius)
{
int x = radius-1;
int y = 0;
int dx = 1;
int dy = 1;
int err = dx - (radius << 1);
while (x >= y)
{
putpixel(x0 + x, y0 + y);
putpixel(x0 + y, y0 + x);
putpixel(x0 - y, y0 + x);
putpixel(x0 - x, y0 + y);
putpixel(x0 - x, y0 - y);
putpixel(x0 - y, y0 - x);
putpixel(x0 + y, y0 - x);
putpixel(x0 + x, y0 - y);
if (err <= 0)
{
y++;
err += dy;
dy += 2;
}
if (err > 0)
{
x--;
dx += 2;
err += (-radius << 1) + dx;
}
}
}
现在,我的问题是,如果我正在绘制一个像drawcircle(100, 100, 100);
这样的圆圈,我怎么能得到一个2D位置并检查该2D位置是否在圆圈内,如果没有,则返回一个'钳位'圆圈边缘的2D位置。
这应该有助于解释我想要做得更好的事情。
void _2DPostionToCirclePosition(Vector2D in, Vector2D *out)
{
//assume in = Vector2D(800, 1100)
//here we somehow calculate if the in 2D
//position is within the circle we
//are drawing drawcircle(100, 100, 100).
//if the in 2D vector is within the circle
//just return in. but if it outside of the
//circle calculate and return a clamped position
//to the edge of the circle
(*out).x = calculatedOutX;
(*out).y = calculatedOutY;
}
答案 0 :(得分:1)
要确定某个点是否在圆圈中,您需要计算它与圆心的距离,此处为(100,100)。 像这样:
data _null_;
set prodincl_fr;
call execute('%runlimitsquery('||prodcat||');');
run;
然后你可以将它与你的圆半径进行比较,如果距离大于它在外面的半径,如果它在内部变小,如果它在内部相等,那么它&& #39; s就在边缘。为此,您可以使用以下内容:
#include <math.h> //for pow and sqrt
double getPointDistance(int x, int y) {
return sqrt (pow ((circleCenterX - x), 2.0) +
pow ((circleCenterY - y), 2.0));
}