-2

如何使用圆的算法在侧大圆中绘制小圆每个圆由 9 或 8 个点组成,并将每个 4 点连接起来以收集并将其与 4 下连接等等
...... ...................................................... .........................................................

4

2 回答 2

2

您需要在一个循环中生成内点和外点。

试一试:

二维环面

#include <GL/glut.h>
#include <cmath>

void Torus2d( float inner, float outer, unsigned int pts )
{
    glBegin( GL_QUAD_STRIP );
    for( unsigned int i = 0; i <= pts; ++i )
    {
        float angle = ( i / (float)pts ) * 3.14159f * 2.0f;
        glVertex2f( inner * cos( angle ), inner * sin( angle ) );
        glVertex2f( outer * cos( angle ), outer * sin( angle ) );
    }
    glEnd();
}

void display()
{
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    double ar = w / h;
    glOrtho( -4 * ar, 4 * ar, -4, 4, -1, 1);

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glColor3ub( 255, 0, 0 );
    Torus2d( 2, 3, 20 );

    glutSwapBuffers();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 640, 480 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    glutMainLoop();
    return 0;
}
于 2013-11-01T18:12:37.037 回答
1

在下面找到受Sieglord 的 Abode 文章启发的 Go 中更快(更少三角)的解决方案(可以很容易地翻译成 c++)

func Torus(cx, cy, inner, outer float64, num_segments int) {
    theta := 2 * math.Pi / float64(num_segments)
    c := math.Cos(theta) //precalculate the sine and cosine
    s := math.Sin(theta)
    t_in := 0.0
    t_out := 0.0
    x_in := inner  //we start at angle = 0
    x_out := outer //we start at angle = 0
    y_in := 0.0
    y_out := 0.0

    gl.Begin(gl.QUAD_STRIP)
    for ii := 0; ii <= num_segments; ii++ {
        gl.Vertex2f(float32(x_in+cx), float32(y_in+cy))   //output vertex inner
        gl.Vertex2f(float32(x_out+cx), float32(y_out+cy)) //output vertex outer
        //apply the rotation matrix
        t_in = x_in
        t_out = x_out

        x_in = c*x_in - s*y_in
        x_out = c*x_out - s*y_out

        y_in = s*t_in + c*y_in
        y_out = s*t_out + c*y_out
    }
    gl.End()
}
于 2014-02-14T21:07:59.143 回答