void Cone::draw(bool debug) { Point c = apex.translate(axis); Vector e0 = perp(axis); Vector v3 = e0.cross(axis); Point e1(v3.getX(), v3.getY(), v3.getZ()); std::vector <Point> pts; for (int i = 0; i < meridians; ++i) { double rad = 2 * M_PI * i / meridians; double x = c.getX() + (e0.getX() * cos(rad) + e1.getX() * sin(rad)) * rayon; double y = c.getY() + (e0.getY() * cos(rad) + e1.getY() * sin(rad)) * rayon; double z = c.getZ() + (e0.getZ() * cos(rad) + e1.getZ() * sin(rad)) * rayon; Point p(x, y, z); pts.push_back(p); } // draw cone top glBegin(GL_TRIANGLE_FAN); glPoint(apex); for (int i = 0; i < meridians; ++i) { glPoint(pts.at(i)); } glPoint(pts.at(0)); glEnd(); if (debug) { glColor3f(1.0f, 0.0f, 0.0f); for (int i = 0; i < meridians; ++i) { glBegin(GL_LINES); glPoint(apex); glPoint(pts.at(i)); glEnd(); } } }
void generateRandomSpheres( int n, float minRadius, float maxRadius, float minPosX, float maxPosX, float minPosY, float maxPosY, float minPosZ, float maxPosZ, std::vector<glSphere>& list ) { for( int i = 0; i < n; ++i ) { float radius = sf::Randomizer::Random( minRadius, maxRadius ); float x = sf::Randomizer::Random( minPosX, maxPosX ); float y = sf::Randomizer::Random( minPosY, maxPosY ); float z = sf::Randomizer::Random( minPosZ, maxPosZ ); list.push_back( glSphere( glPoint( x, y, z ), radius ) ); } }