C++ 画圆的象限

C++ 画圆的象限,c++,opengl,geometry,C++,Opengl,Geometry,我想分别绘制一个圆的所有1/4,但这是我的窗口设置,原点位于左上角(0,0)。不管怎样,我可以抽出时间来而不是再次反转屏幕 我目前的实施是: //nX: x //nY: y //nR: radius //verts: std::vector<int> //indices: std::vector<uint32_t> verts.push_back(nX + nR); verts.push_back(nY + nR); for (int i = 270; i >=

我想分别绘制一个圆的所有1/4,但这是我的窗口设置,原点位于左上角(0,0)。不管怎样,我可以抽出时间来而不是再次反转屏幕

我目前的实施是:

//nX: x
//nY: y
//nR: radius
//verts: std::vector<int>
//indices: std::vector<uint32_t>

verts.push_back(nX + nR); verts.push_back(nY + nR);
for (int i = 270; i >= 360; i -= slice_count)
{
    verts.push_back(nX + cos(DEG_TO_RAD * i) * nR);
    verts.push_back(nY + sin(DEG_TO_RAD * i) * nR);
}


//...
//rest of the code are index manipulation

glDrawElements(GL_TRIANGLE_STRIP, indices.size(), GL_UNSIGNED_INT, &indices[0]);
如果我只是为了绘制上面的图形而从270旋转到360,我会感到困惑。你有什么办法可以缓解我的困惑吗?而且逻辑上也不正确,对吧?


下面是我编写的新测试代码

glBegin(GL_TRIANGLE_FAN);
    glVertex2i(500, 400);
    for (int i = 360; i >= 270; --i)
    {
        int ax = (500 + cos(DEG_TO_RAD * i) * 100);
        int ay = (400 + sin(DEG_TO_RAD * i) * 100);
        glVertex2i(ax, -ay);
    }
glEnd();
(0,0)位于屏幕的左上角,这一事实使得正X向右移动(这与通常的数学表示一致),但正Y向下移动(这与通常的数学表示不一致)。如果要模拟通常的函数绘图数学行为,其中0º-90º球体象限位于右上侧,则可以反转Y坐标

换句话说,尝试:

verts.push_back(nY - (sin(DEG_TO_RAD * i) * nR));

嗯,在实现中可能还有其他一些细节,我用这段代码看不到。理论上,如果你这样做,Y坐标应该被切换。如果成功的话,你应该能够切换到0和90,并且仍然得到相同的图片。啊!我只是把负号放在
sin
函数中。它起作用了!我可以接受这个答案,因为它是一样的。你刚刚给了我一个提示,但你是解决这个问题的人。谢谢@为什么这个圆象限的直线不是真正的直线?我的意思是从0-90(直线)其他人不。(90-180,180-270,270-360)?啊,没关系,这是因为格林·范
verts.push_back(nY - (sin(DEG_TO_RAD * i) * nR));