Я хочу, чтобы де Кастеляу побежал. Я написал комментарии в коде, который я проверяю.
Вот псевдокод для deCasteljau:
DeCasteljau(anz, P[], t){
for(j=anz-2; j>=0; j--)
for(i=0; i<=j; i++)
P[i]=(1-t) * P[i] + t * P[i+1];
}
Я должен использовать Vector2D.
#include <stdlib.h>
#include <GL\glut.h>
#include <iostream>
#include <cmath>
#include "Vector2D.h"
using namespace std;
#define PI 3.14159265
int w = 600;
int h = 600;
int array[][2] = { { 0, 0 }, { 2, 4 }, { 3 ,5 } };Vector2D p0(0,0);
Vector2D p1(0,0);
Vector2D p2(0,0);
float deCasteljau(float t){
Vector2D x;
Vector2D y;
p0.setXY(array[0][0], array[0][1]);
p1.setXY(array[1][0], array[1][1]);
p2.setXY(array[2][0], array[2][1]);
for (int j=3-2;j>=0;j--)
for (int i=0; i<=j; i++)
{
//how to write this: P[i]=(1-t) * P[i] + t * P[i+1]
}
return P[0]; //and here to
}
void display(void) {
/* clear all pixels */
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
//how is the code for draw the spline?
glEnd();glFlush();
}
void init(void) {
/* select clearing color */
glClearColor(0.0, 0.0, 0.0, 0.0);
/* initialize viewing values */
glOrtho(0, w, 0, h, -1, 1);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(w + 100, h + 100);
glutInitWindowPosition(100, 0);
glutCreateWindow("Aufgabe7");
for(int t=0; t<=1;t=t+0.01){
deCasteljau(t);
}
init();
glutDisplayFunc(display);
glutMainLoop();
return 0; /* ANSI C requires main to return int. */
}
Вы можете написать это
//how to write this: P[i]=(1-t) * P[i] + t * P[i+1]
как
P[i].x= (1-t) * P[i].x + t * P[i+1].x;
P[i].y= (1-t) * P[i].y + t * P[i+1].y;