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


C++ PV3D::crossProduct方法代码示例

本文整理汇总了C++中PV3D::crossProduct方法的典型用法代码示例。如果您正苦于以下问题:C++ PV3D::crossProduct方法的具体用法?C++ PV3D::crossProduct怎么用?C++ PV3D::crossProduct使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在PV3D的用法示例。


在下文中一共展示了PV3D::crossProduct方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: draw

//-------------------------------------------------------------------------
void MontanaRusa::draw(bool relleno,bool dibujaNormales,bool derrapa){

	Malla::draw(relleno,dibujaNormales);  // Dibuja la malla
        
	PV3D* fderivate = fDerivate(carPos);
	PV3D* sderivate = sDerivate(carPos);

	PV3D* Tt=fDerivate(carPos); Tt->normalize();					// Tt = C'
	PV3D* Bt=fderivate->crossProduct(sderivate); Bt->normalize();	// Bt = C'.C''
	PV3D* Nt=Bt->crossProduct(Tt);									// Nt = Bt.Tt
	PV3D* Ct=function(carPos);										// Ct = C

	GLfloat m[] ={  Nt->getX(),	Nt->getY(),	Nt->getZ(),	0,		// Se niega Bt porque al ser 
					-Bt->getX(),-Bt->getY(),-Bt->getZ(),0,		// un producto escalar es perpendicular 
					Tt->getX(),	Tt->getY(),	Tt->getZ(),	0,		// al plano definido por C'.C'' 
					Ct->getX(),	Ct->getY(),	Ct->getZ(),	1};		// pero en sentido contrario

	glMatrixMode(GL_MODELVIEW);        
	glPushMatrix();
               
		glMultMatrixf(m);
		if (derrapa)
			glTranslated(0,0,-1.3);
		//glTranslated(Ct->getX(),Ct->getY(),Ct->getZ());  // lo pone en la posición pero no con la torsión necesaria
		car->draw(); 
              
	glPopMatrix();

	//deletes de los objetos ya no necesarios
	delete sderivate;	delete fderivate;	delete Tt;
	delete Bt;			delete Nt;			delete Ct;
		
}
开发者ID:GiraldTec,项目名称:2013-igraphic,代码行数:34,代码来源:MontanaRusa.cpp

示例2: build

//-------------------------------------------------------------------------
void MontanaRusa::build(){
     
	GLfloat intervaloToma = 2*2*M_PI/NQ;  // Hay que dar dos vueltas porque hay puntos con 2 valores
	
	Poligon *poli = new Poligon(new PV3D(),NP,tam);  // un polígono del tamaño y con los lados que queremos
    vector<PV3D*>* puntos= poli->getVertex();  
        
    for(int i=0;i<NQ;i++){  // Esto ocurre en cada "sección" del gusano
            GLfloat toma=intervaloToma*i;				// Este valor hace que a cada vuelta la "matriz" sea única
            
            PV3D* fderivate = fDerivate(toma);			// Se calculan los valores que ayudan al cálculo de los puntos
			PV3D* sderivate = sDerivate(toma);

			PV3D* Tt=fDerivate(toma); Tt->normalize();
            PV3D* Bt=fderivate->crossProduct(sderivate); Bt->normalize();
            PV3D* Nt=Bt->crossProduct(Tt);
            PV3D* Ct=function(toma);

			for(int j=0;j<NP;j++){									// Esto ocurre con cada uno de los vértices del polígono
                int numV=NP*i+j;
                PV3D* clon=puntos->at(j)->clone();					// Un clon del punto del polígono para trabajar
                PV3D* punto=clon->matrixProduct(Nt,Bt,Tt,Ct);
				vertex->at(numV)=punto;								// El punto recibe un identificador y siempre con sentido
                delete clon;  
            }

            //deletes de los objetos ya no necesarios
            delete sderivate;	delete fderivate;	delete Tt;
			delete Bt;			delete Nt;			delete Ct;

    }
    // Se construyen las caras

	for(int numFace=0;numFace<faces->size();numFace++){      //  |>Recorremos todas las caras en orden
        faces->at(numFace)= new Cara(4);
        vector<VerticeNormal*>* auxNormals= new vector<VerticeNormal*>(4);

		int a= (numFace) % (NP*NQ);
        int b= (nextVertex(numFace) )% (NP*NQ);		// Teniendo cuidado de cerrar bien el círculo
        int c= (nextVertex(numFace) +NP)% (NP*NQ);
        int d= (numFace+NP)% (NP*NQ);

        auxNormals->at(0)=new VerticeNormal(a,numFace);
        auxNormals->at(1)=new VerticeNormal(b,numFace);
        auxNormals->at(2)=new VerticeNormal(c,numFace);
        auxNormals->at(3)=new VerticeNormal(d,numFace);
        
        faces->at(numFace)->setIndicesVN(auxNormals); 
     }
	// Se hacen las normales

    for(int i=0;i<this->numFaces;i++){
            normals->at(i)= this->doVectorNormalNewell(faces->at(i));
    }
	
    delete poli;
	
}
开发者ID:GiraldTec,项目名称:2013-igraphic,代码行数:59,代码来源:MontanaRusa.cpp


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