当前位置: 首页>>代码示例>>C++>>正文


C++ Punto::normalizar方法代码示例

本文整理汇总了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;
		// }
		// 
			
	
};
开发者ID:ferblape,项目名称:raytracer,代码行数:60,代码来源:Primitiva.cpp

示例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;
}
开发者ID:ferblape,项目名称:raytracer,代码行数:9,代码来源:FuenteLuminosa.cpp

示例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:  ";
};
开发者ID:ferblape,项目名称:raytracer,代码行数:39,代码来源:Render.cpp

示例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;

};
开发者ID:ferblape,项目名称:raytracer,代码行数:45,代码来源:Primitiva.cpp


注:本文中的Punto::normalizar方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。