抛物面的计算(顶点坐标)(不变)(具体原理不理解,背下即可)
#define PI2 2*3.14159
#define DELTA_R 0.5
double surfVertices[36][10][3];
void ComputerParabolicSurface(){
for(int a = 0; a<36; a++){ //a表示角度,36等分
// DELTA是单位长度 (DELTA*r)是极坐标里的r
// PI2/36.0 是单位角度 a*PI2/36.0 角度转化为弧度
//填空 三行代码
surfVertices[a][r][0] = (DELTA*r)*cos(a*PI2/36.0);
surfVertices[a][r][1] = (DELTA*r)*sis(a*PI2/36.0);
surfVertices[a][r][2] = (DELTA*r)*(DELTA*r);
}
}
法向量的计算(法向量)
void Normal(double a[3], double b[3], double c[3], double n[3]){
double p[3],q[3]; //两个矢量
double len;
for(int k = 0; k<3; k++){
// 两个矢量 尾->头
p[k] = b[k] - a[k];
q[k] = c[k] - a[k];
}
//填空
//计算法向量n (算叉积,行列式)
n[0] = p[1]*q[2] - p[2]*q[1];
n[1] = p[2]*q[0] - p[0]*q[2];
n[2] = p[0]*q[1] - p[1]*q[0];
//单位化法向量n
double t = n[0]*n[0] + n[1]*n[1] +n[2]*n[2]; //x^2+y^2+k^2
t = sqrt(t); //开平方获得单位矢量的长度
//获得单位法向量
for(int i = 0; i<3; i++){
n[i]/=t;
}
}
注册函数
glutCreatWindow(argv[0]){
//发出两个消息
//窗口大小改变,调用reshape:视口变换,做投影,模型视图矩阵变成单位矩阵
//重绘:调用repaint和display
//向操作系统注册函数 , 做消息映射(如果有...消息,就调用...)
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
}
法向量的计算(计算题)
glClear()函数的作用以及参数的含义