本文整理汇总了C++中Punto::normalizar方法的典型用法代码示例。如果您正苦于以下问题:C++ Punto::normalizar方法的具体用法?C++ Punto::normalizar怎么用?C++ Punto::normalizar使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Punto
的用法示例。
在下文中一共展示了Punto::normalizar方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: puntosInterseccion
int Esfera::puntosInterseccion(Punto p, Punto u, float *t) {
// Vector u = Origen + t*(Destino)
// t : incognita
// Q = Origen = p
// V = Destino
// rayo = p + t*u
bool v = false;
float t1,t2;
u.normalizar();
Punto Q = p - posicion;
Punto V = u;
float a = V*V;
float b = 2*(Q*V);
float c = (Q*Q) - radio*radio;
//
// if (v) cerr << "a: "<<a<<" - b: "<<b<<" - c: "<<c<<endl;
//
// Cogemos, de las dos soluciones, la negativa, porque es la que antes
// intersectará de las dos
float D = b*b - 4*a*c;
//
// if (v) cerr << "D: "<<D<<" " <<sqrt(D)<<endl;
//
if (D < 0) {
return 0;
}
else {
t1 = (-b - sqrt(D)) / (2*a);
if (D == 0) {
*t = t1;
return 1;
}
t2 = (-b + sqrt(D)) / (2*a);
if (t1 > t2) {
*t = t2;
return 1;
}
*t = t1;
return 1;
}
//
// if ((t1 > 0 && t2 <0)) {
// *t = t1;
// return 1;
// }
// if ((t1 < 0 && t2>0)) {
// *t = t2;
// return 1;
// }
//
};
示例2: RGB
Focalizada::Focalizada(Punto centro_, Punto direccion_, float factor_) {
centro = centro_;
factor = factor_;
direccion = direccion_.normalizar();
i = RGB(1,1,1);
n = 200;
tipo = FOCALIZADA;
}
示例3: renderiza
void RenderRayTracer::renderiza(Escena escena, Camara c) {
RGB color;
// float i,j;
int i,j;
float alfa = (c.fov*PI)/360.0;
float dist = 0.5/tan(alfa);
float incx = 1.0/(float)ancho*1.0;
float incy = 1.0/(float)alto*1.0;
float aspectratio = (float)ancho/(float)alto;
float alfaw = alfa*aspectratio;
float ancho_a = tan(alfaw)*dist;
Punto centro = c.posicion + (c.look - c.posicion).normalizar()*dist;
// Vector horizontal y vertical por los que se mueve
Punto horizontal = up^(c.look - c.posicion);
horizontal.normalizar();
Punto vertical = (c.look - c.posicion).normalizar()^horizontal;
vertical.normalizar();
Punto direccion = centro - horizontal*ancho_a - vertical*0.5;
for(i=0;i<ancho;i++) {
for(j=0;j<alto;j++) {
// trazamos un rayo desde centro hasta x,y -> devuelve un color
//
// (direccion+horizontal*i*incx+vertical*j*incy - c.posicion).escribir();
//
color = escena.trazarRayo(c.posicion,(direccion+horizontal*i*incx+vertical*j*incy - c.posicion).normalizar(),1,-1,1);
raster.push_back(color);
}
}
cerr << "Tiempo renderizado: ";
};
示例4: if
// Constructor
Triangulo::Triangulo(Punto p0, Punto p1, Punto p2) {
// Vertices en sentido antihorario
vertices.push_back(p0);
vertices.push_back(p1);
vertices.push_back(p2);
zmax = max(p0.z,p1.z,p2.z);
tipo = OTRO;
posicion = (p0 + p1 + p2) / 3;
Punto normal = (p2-p1)^(p0-p2);
normal.normalizar();
normales.push_back(normal);
material = Material(RGB(0,1,0),0.5,0.5);
// Proyectamos el polígono en el plano
if (fabs(normales[0].x) > fabs(normales[0].y) && fabs(normales[0].x) > fabs(normales[0].z)) {
// Proyectamos sobre las X
proyecc = 1;
i0 = proyecc - 1;
i1 = 1;
i2 = 2;
}
else if (fabs(normales[0].y) > fabs(normales[0].x) && fabs(normales[0].y) > fabs(normales[0].z)) {
// Proyectamos sobre las Y
proyecc = 2;
i0 = proyecc - 1;
i1 = 0;
i2 = 2;
}
else {
// Proyectamos sobre las Z
proyecc = 3;
i0 = proyecc - 1;
i1 = 0;
i2 = 1;
}
// i1 = (i0-1)%3;
// i2 = (i0+1)%3;
};