Example #1
0
            void createVertices(std::vector<atlas::math::Point>& vertices)
            {
                USING_ATLAS_MATH_NS;

                float theta = 0.0f;
                float thetaDelta = glm::two_pi<float>() / subDivs;

                vertices.push_back(Point(0));

                for (int x = 0; x < subDivs; ++x)
                {
                    theta = x * thetaDelta;
                    vertices.push_back(
                        cylindricalToCartesian(Point(radius, theta, 0)));
                }

                vertices.push_back(Point(0));
                for (int x = 0; x < subDivs; ++x)
                {
                    theta = x * thetaDelta;
                    vertices.push_back(
                        cylindricalToCartesian(Point(radius, theta, 0)));
                }

            }
Example #2
0
void myRobot::populateArrays(){

	for (int h=0; h<=stacks; h++) {//for each height
		yy[h]=1.0/stacks*h;
		//printf(" yy= %f",yy[h]);
		for (int i=0; i<5; i++) {

			double angle=90.0/4.0*i-45.0; //explicar
			double zOnBase=0.5;
			double xOnBase=tan(angle * M_PI / 180.0)/2;




			CylindricalPoint pt;
			pt.y=1.0;
			pt.r=0.25;
			pt.rho=-45.0+90/4.0*i;
			double zOnTop=cylindricalToCartesian(&pt).z;
			double xOnTop=cylindricalToCartesian(&pt).x;

			pt.r=1.0;
			pt.y=0;
			double zNormalOnTop=cylindricalToCartesian(&pt).z;
			double xNormalOnTop=cylindricalToCartesian(&pt).x;




			zz[h*5+i]=zOnBase+(zOnTop-zOnBase)*yy[h];
			xx[h*5+i]=xOnBase+(xOnTop-xOnBase)*yy[h];


			zz_normal[h*5+i]=1+(zNormalOnTop-1)*yy[h];
			xx_normal[h*5+i]=xNormalOnTop*yy[h];

			double norm=sqrt(zz_normal[h*5+i]*zz_normal[h*5+i]+xx_normal[h*5+i]*xx_normal[h*5+i]);

			zz_normal[h*5+i]/=norm;
			xx_normal[h*5+i]/=norm;

			//printf("populate x+z: %f\n", sqrt(zz_normal[h*5+i]*zz_normal[h*5+i]+ xx_normal[h*5+i]*xx_normal[h*5+i]));



		}

	}
}
Example #3
0
void myCylinder::drawRingVertex(int stackNr){

	float stackHeight=1.0/stacks;
	CylindricalPoint cylPt1,cylPt2;
	cylPt1.r=0.5;
	cylPt1.y=stackNr/(double)stacks-0.5;
	cylPt2.r=0.5;
	cylPt2.y=cylPt1.y+1/(double)stacks;
	CartesianPoint cartPt1,cartPt2 ;


	for (int i=0; i<slices; i++) {

		cylPt1.rho=360./slices*(i-1/2.0);

		cartPt1=cylindricalToCartesian(&cylPt1);
		cylPt2.rho=360./slices*(i+1/2.0);
		cartPt2=cylindricalToCartesian(&cylPt2);

		glNormal3d(cartPt1.x, cartPt1.y, cartPt1.z);
        glTexCoord2d(repX/slices*i, repY/stacks*stackNr);
		glVertex3d(cartPt1.x, cartPt1.y, cartPt1.z);

		glNormal3d(cartPt2.x, cartPt1.y, cartPt2.z);
        
        glTexCoord2d(repX/slices*(i+1), repY/stacks*stackNr);
		glVertex3d(cartPt2.x, cartPt1.y, cartPt2.z);

		glNormal3d(cartPt2.x, cartPt2.y, cartPt2.z);
        
        glTexCoord2d(repX/slices*(i+1), repY/stacks*(stackNr+1));
		glVertex3d(cartPt2.x, cartPt2.y, cartPt2.z);

		glNormal3d(cartPt1.x, cartPt2.y, cartPt1.z);
        
        glTexCoord2d(repX/slices*i, repY/stacks*(stackNr+1));
		glVertex3d(cartPt1.x, cartPt2.y, cartPt1.z);



	}

}
Example #4
0
void myCylinder::drawRing(int stackNr){

	//printf("drawing\n");
	float stackHeight=1.0/stacks;
	CylindricalPoint cylPt1,cylPt2,cylNormal;
	cylPt1.r=0.5;
	cylPt1.y=stackNr/(double)stacks-0.5;
	cylPt2.r=0.5;
	cylPt2.y=cylPt1.y+1/(double)stacks;
	cylNormal.y=0;
	cylNormal.r=1.0;
	CartesianPoint cartPt1,cartPt2,cartNormal;


	for (int i=0; i<slices; i++) {

		cylPt1.rho=360./slices*(i-1/2.0);

		cartPt1=cylindricalToCartesian(&cylPt1);
		cylPt2.rho=360./slices*(i+1/2.0);
		cartPt2=cylindricalToCartesian(&cylPt2);
		cylNormal.rho=360./slices*i;
		cartNormal=cylindricalToCartesian(&cylNormal);

		glNormal3d(cartNormal.x, cartNormal.y, cartNormal.z);
        
        
		glVertex3d(cartPt1.x, cartPt1.y, cartPt1.z);
		glVertex3d(cartPt2.x, cartPt1.y, cartPt2.z);
		glVertex3d(cartPt2.x, cartPt2.y, cartPt2.z);
		glVertex3d(cartPt1.x, cartPt2.y, cartPt1.z);



	}

}
Example #5
0
 virtual void draw(RoundState& state) override {
   const auto& appParams = BleepoutParameters::get();
   float radius = appParams.domeRadius * _radiusScale;
   ofPushMatrix();
   ofPushStyle();
   ofEnableAlphaBlending();
   ofFill();
   ofSetColor(_color);
   
   for (int i = 0; i < _count; i++) {
     float heading = ofMap((float)i, 0, _count - 1, 0, 360);
     heading += _headingPulser.update(state.time);
     ofVec3f pos = cylindricalToCartesian(radius, heading, 1.0f);
     ofDrawSphere(pos, _sphereRadius);
   }
   
   //...
   ofPopStyle();
   ofPopMatrix();
 }
Example #6
0
void myCylinder::draw(int opt){


      topText->apply();
    glBegin(GL_TRIANGLE_FAN);
    
    glNormal3d(0, 1, 0);
    glTexCoord2d(0.5, 0.5);
    glVertex3d(0, 0.5, 0);
    
    CylindricalPoint pt;
    CartesianPoint ptCart;
    pt.y=0.5;
    pt.r=0.5;
    
  
    
    for (int i=0; i<slices+1; i++) {
        pt.rho=360./slices*(i-1/2.0);
        ptCart=cylindricalToCartesian(&pt);
        glTexCoord2d(-ptCart.x+0.5, ptCart.z+0.5);
        glVertex3d(ptCart.x, ptCart.y, ptCart.z);
        
    }
    
    glEnd();
    glBegin(GL_TRIANGLE_FAN);
    pt.y=-0.5;
    glNormal3d(0, -1, 0);
    
    for (int i=slices+1; i>=0; i--) {
        pt.rho=360./slices*(i-1/2.0);
        ptCart=cylindricalToCartesian(&pt);
        glTexCoord2d(ptCart.x+0.5, ptCart.z+0.5);
        glVertex3d(ptCart.x, ptCart.y, ptCart.z);
        
    }
    
    
    glEnd();

    sideText->apply();

	glBegin(GL_QUADS);
    
  
	if(opt == CENTERED_NORMALS)
		for (int i=0; i<stacks; i++) {
			this->drawRing(i);
		}
	else{
		for (int i=0; i<stacks; i++) {
			this->drawRingVertex(i);
		}
	}

	glEnd();



}
Example #7
0
void PhysicsObject::setPositionCylindrical(float r, float heading, float z) {
  staticRotation = 360 - heading;
  setPosition(cylindricalToCartesian(r, heading, z));
}