C++ 通过中心点的圆弧

C++ 通过中心点的圆弧,c++,opengl,geometry,C++,Opengl,Geometry,我试图在OpenGL中通过三个指定点渲染一条圆弧。到目前为止,我已经设法计算了所有需要的不同值(通过三个点的圆的中心和半径,以及起点和终点角度)。我的问题是根据中点的位置决定画弧的方向,顺时针还是逆时针。我的代码如下:(hacky实验代码,[0]点为开始,[1]点为中间,[2]点为结束) void render() { glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); GL3F(0.0f,0.0f,0.0f); //圆参数 点2D中心=圆中心(点[0],点[1],点[2]); 双

我试图在OpenGL中通过三个指定点渲染一条圆弧。到目前为止,我已经设法计算了所有需要的不同值(通过三个点的圆的中心和半径,以及起点和终点角度)。我的问题是根据中点的位置决定画弧的方向,顺时针还是逆时针。我的代码如下:(hacky实验代码,[0]点为开始,[1]点为中间,[2]点为结束)

void render()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
GL3F(0.0f,0.0f,0.0f);
//圆参数
点2D中心=圆中心(点[0],点[1],点[2]);
双圆=半径(点[0],点[1],点[2]);
//电弧参数
双启动=atan2(点[0]。y-中心.y,点[0]。x-中心.x)*(180/M_-PI);
双中间=atan2(点[1]。y-中心.y,点[1]。x-中心.x)*(180/M_-PI);
双端=atan2(点[2]。y-中心.y,点[2]。x-中心.x)*(180/M_-PI);
如果(开始<0)
开始+=360;
如果(中间<0)
中等+=360;
如果(结束<0)
结束+=360;
//渲染圆
glBegin(GL_线_带);
for(int i=start;i
如您所见,圆弧当前仅在起点和终点之间渲染。我需要做什么才能确保它通过中心点以正确的方向渲染

更新1: 例如,在下图中,蓝色点是我定义的三个点,红色点是圆心。在上图中,弧穿过我的中点。但在下图中,弧仍然是顺时针绘制的,尽管我的中点现在位于右侧。不同的起点/终点组合也会出现相同的情况。是否有统一的方法确保圆弧始终通过中心点

对:

错:


您可以查看中间位置

(...)

if (end < start)
    end += 360;
if (middle < start)
    middle += 360;

if (middle < end)
  doNormal = true;
else 
  doNormal = false;

// Render circle
glBegin(GL_LINE_STRIP);
for (int i = doNormal ? start : end; i < doNormal ? end : start; i += doNormal ? 1 : -1)
   (...)
(…)
如果(结束<开始)
末端+=360;
如果(中间<开始)
中等+=360;
if(中间<末端)
doNormal=真;
其他的
正常=假;
//渲染圆
glBegin(GL_线_带);
对于(int i=doNormal?start:end;i
你能添加你想要实现的目标的图像吗?没有足够的代表来添加图像,但我已经链接了一些。这看起来像是一个复制品。我不能将其标记为重复,因为另一个问题没有被接受/投票赞成的答案,但那里的内容应该仍然有用。是的,在那里使用我的角度修正。。。并使用glVertex将MoveTo/LineTo更改为。。。
(...)

if (end < start)
    end += 360;
if (middle < start)
    middle += 360;

if (middle < end)
  doNormal = true;
else 
  doNormal = false;

// Render circle
glBegin(GL_LINE_STRIP);
for (int i = doNormal ? start : end; i < doNormal ? end : start; i += doNormal ? 1 : -1)
   (...)