このベジェ曲線に接線を引きたいと考えています。
が手つかずの状態です
どのような考え方で取り組めばいいですか?
C
1 2#include<stdlib.h> //C言語標準ライブラリのインクルード 3#include<GL/glut.h> //GLUTヘッダファイルのインクルード 4#include<GL/gl.h> //GLヘッダファイルのインクルード 5 6#define PI 3.14159265 7 8float controlpoints[4][3] = 9{ 10 {1,2,0}, 11 {2,3,0}, 12 {3,1,0}, 13 {5,1,0}, 14}; 15 16//プロトタイプ宣言 17 18void init(void); 19void keyboard(unsigned char key, int x, int y); 20void display(void); 21void resize(int w, int h); 22 23int main(int argc, char **argv) 24{ 25 glutInit(&argc, argv); 26 /* ウィンドウの生成 */ 27 glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH); 28 glutInitWindowPosition(200, 50); 29 glutInitWindowSize(400,400); 30 glutCreateWindow(argv[0]); 31 32 init(); 33 glutReshapeFunc(resize); 34 glutDisplayFunc(display); 35 glutKeyboardFunc(keyboard); 36 37 glutMainLoop(); 38 39 return 0; 40} 41 42void keyboard(unsigned char key, int x, int y) 43{ 44 switch (key) { 45 case '\33': 46 case 'q': 47 case 'Q': 48 exit(0); 49 break; 50 default: 51 break; 52 } 53} 54 55void display(void) 56{ 57 int i; 58 59 glClear(GL_COLOR_BUFFER_BIT); 60 61 glColor4f(1.0, 1.0, 1.0, 1.0); 62 glBegin(GL_LINE_STRIP); 63 for (i = 0; i <= 30; i++) 64 glEvalCoord1f((GLfloat)i / 30.0); 65 glEnd(); 66 67 /* 制御点を描く */ 68 glPointSize(5.0); 69 glColor4f(1.0,1.0,0.0,1.0); 70 glBegin(GL_POINTS); 71 for (i = 0; i < 4; i++) 72 glVertex3fv(&controlpoints[i][0]); 73 glEnd(); 74 75 glFlush(); 76} 77 78void resize(int w, int h) 79{ 80 glViewport(0, 0, (GLsizei)w, (GLsizei)h); 81 glMatrixMode(GL_PROJECTION); 82 glLoadIdentity(); 83 if (w <= h) 84 glOrtho(-5.0, 20.0, -5.0*(GLfloat)h / (GLfloat)w, 85 12.5*(GLfloat)h / (GLfloat)w, -10.0, 5.0); 86 else 87 glOrtho(-5.0*(GLfloat)w / (GLfloat)h, 88 5.0*(GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0); 89 glMatrixMode(GL_MODELVIEW); 90 glLoadIdentity(); 91 glScalef(3,3,3); 92} 93 94 95void init(void) 96{ 97 glClearColor(0.0, 0.0, 0.0, 0.0); 98 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &controlpoints[0][0]); 99 glEnable(GL_MAP1_VERTEX_3); 100} 101
OpenGLタグを追加してください。
回答1件
あなたの回答
tips
プレビュー