#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#include <GL/freeglut/freeglut.h>
#include <math.h>
#define WIDTH 320
#define HEIGHT 240
#define Pai 3.1415926
void Circle2D(float radius,int x,int y)
{
for (float th1 = 0.0; th1 <= 360.0; th1 = th1 + 1.0)
{
float th2 = th1 + 10.0;
float th1_rad = th1 / 180.0 * Pai;
float th2_rad = th2 / 180.0 * Pai;
float x1 = radius * cos(th1_rad);
float y1 = radius * sin(th1_rad);
float x2 = radius * cos(th2_rad);
float y2 = radius * sin(th2_rad);
glBegin(GL_LINES);
glVertex2f( x1+x, y1+y );
glVertex2f( x2+x, y2+y );
glEnd();
}
}
void Circle2DFill(float radius,int x,int y)
{
for (float th1 = 0.0; th1 <= 360.0; th1 = th1 + 1.0)
{
float th2 = th1 + 10.0;
float th1_rad = th1 / 180.0 * Pai;
float th2_rad = th2 / 180.0 * Pai;
float x1 = radius * cos(th1_rad);
float y1 = radius * sin(th1_rad);
float x2 = radius * cos(th2_rad);
float y2 = radius * sin(th2_rad);
glBegin(GL_TRIANGLES);
glVertex2f( x, y );
glVertex2f( x1+x, y1+y );
glVertex2f( x2+x, y2+y );
glEnd();
}
}
void Oval2D(float radius,int x,int y,float ovalx,float ovaly)
{
for (float th1 = 0.0; th1 <= 360.0; th1 = th1 + 1.0)
{
float th2 = th1 + 10.0;
float th1_rad = th1 / 180.0 * Pai;
float th2_rad = th2 / 180.0 * Pai;
float x1 = radius * cos(th1_rad)*(ovalx/100.0f);
float y1 = radius * sin(th1_rad)*(ovaly/100.0f);
float x2 = radius * cos(th2_rad)*(ovalx/100.0f);
float y2 = radius * sin(th2_rad)*(ovaly/100.0f);
glBegin(GL_LINES);
glVertex2f( x1+x, y1+y );
glVertex2f( x2+x, y2+y );
glEnd();
}
}
void Oval2DFill(float radius,int x,int y,float ovalx,float ovaly)
{
for (float th1 = 0.0; th1 <= 360.0; th1 = th1 + 1.0)
{
float th2 = th1 + 10.0;
float th1_rad = th1 / 180.0 * Pai;
float th2_rad = th2 / 180.0 * Pai;
float x1 = radius * cos(th1_rad)*(ovalx/100.0f);
float y1 = radius * sin(th1_rad)*(ovaly/100.0f);
float x2 = radius * cos(th2_rad)*(ovalx/100.0f);
float y2 = radius * sin(th2_rad)*(ovaly/100.0f);
glBegin(GL_TRIANGLES);
glVertex2f( x, y );
glVertex2f( x1+x, y1+y );
glVertex2f( x2+x, y2+y );
glEnd();
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
Circle2D(40.0f,50,50);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
Circle2DFill(50.0f,150,180);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
Oval2D(50.0f,150,80,100.0f,80.0f);
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
Oval2DFill(80.0f,260,120,50.0f,100.0f);
glutSwapBuffers();
}
void idle(void)
{
glutPostRedisplay();
}
void Init(){
glClearColor(1.0, 1.0, 1.0, 1.0);
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);
}
int main(int argc, char *argv[])
{
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("円を描画");
glutDisplayFunc(display);
glutIdleFunc(idle);
Init();
glutMainLoop();
return 0;
}
|