如何从开始(B)到结束(C)点给出圆形或半圆形或圆弧:
未知值:
要求
有人可以提供我在OpenGL中绘制圆弧的等式吗?
提示:
它是圆形,半圆形还是弧形,它取决于圆心的位置以及起点和终点。
请给我一些解决方法。
修改
我写了这个,现在是: 错误的绘制方向。请看图片。半圆必须是线的底部而不是顶部。 在1的情况下,一切都很好。 在2的情况下,绘制方向应为底部(CCW)
float startAngle = atan2(B.y - centerArc.y, B.x - centerArc.x);
float endAngle = atan2(C.y - centerArc.y, C.x - centerArc.x);
if (endAngle < startAngle)
{
endAngle += 2.0f * PI;
}
glBegin(GL_LINE_STRIP);
for (float angle = startAngle; angle <= endAngle; angle = angle + 0.01f)
{
float x = centerArc.x + cos(angle) * r;
float y = centerArc.y + sin(angle) * r;
glVertex2f(x, windowHeight - y);
}
glEnd();
答案 0 :(得分:1)
圆,半圆或圆弧上的点的等式对于所有情况都是相同的。唯一变化的变量是角度所在的范围。
在伪代码中,这看起来如下:
for angle in [startAngle, endAngle]
p_on_circle = M + r * (cos(angle), sin(angle))
这假定,该角度以弧度给出,因此人们可能只想使用
startAngle = atan2(B.y - M.y, B.x - M.x)
endAngle = atan2f(C.y - M.y, C.x - M.x)
修改强>
由于atan2在[-pi,pi]中产生角度,当endAngle
小于startAngle
时会产生一些问题,因此必须确保endAngle
总是大于startAngle
{1}}。例如,这可以通过以下方式完成:
if (endAngle < startAngle)
endAngle += 2*pi;