int main(int argc, char *argv[]) { // Create the world Enki::World world(200, 200); // Create a Khepera and position it Enki::EPuck *ePuck = new Enki::EPuck; ePuck->pos = Enki::Point(100, 100); ePuck->leftSpeed = 30; ePuck->rightSpeed = 20; // objects are garbage collected by the world on destruction world.addObject(ePuck); Enki::Polygone p; const double amount = 9; const double radius = 5; const double height = 20; for (double a = 0; a < 2*M_PI; a += 2*M_PI/amount) p.push_back(Enki::Point(radius * cos(a), radius * sin(a))); Enki::PhysicalObject* o = new Enki::PhysicalObject; Enki::PhysicalObject::Hull hull(Enki::PhysicalObject::Part(p, height)); o->setCustomHull(hull, 1); o->pos = Enki::Point(100, 100); o->setColor(Enki::Color(0.4,0.6,0.8)); world.addObject(o); // Run for some times for (unsigned i=0; i<10; i++) { // step of 50 ms world.step(0.05); std::cout << "E-puck pos is (" << ePuck->pos.x << "," << ePuck->pos.y << ")" << std::endl; } }
void TEnkiEnvironment::addCubeWithParameters (double x, double y, Enki::Color color, int objectNumber) { // Создаем полигон, являющийся основнанием куба Enki::Polygone p; p.push_back(Enki::Point(cubeSize/2.0,cubeSize/2.0)); p.push_back(Enki::Point(-cubeSize/2.0,cubeSize/2.0)); p.push_back(Enki::Point(-cubeSize/2.0,-cubeSize/2.0)); p.push_back(Enki::Point(cubeSize/2.0,-cubeSize/2.0)); Enki::PhysicalObject* o = new Enki::PhysicalObject; Enki::PhysicalObject::Hull hull(Enki::PhysicalObject::Part(p, cubeSize)); // Задаем форму куба o->setCustomHull(hull, -100000); // Отрицательная масса - то же, что бесконечная, поэтому куб сдвинуть с места будет невозможно )); o->collisionElasticity = 0; // Все тепло от столкновения поглощается o->setColor(color); o->pos = Enki::Point(x, y); o->objectNumber = objectNumber; world->addObject(o); }