int main(int argc, const char *argv[]) { const int level = 8; // const double size = 30.0; /* 30mm trunk for A4 */ const double size = 65.0; /* 65mm trunk for A3 */ turtle(DEV_HPGL, SIZ_A3, ORI_LAND, FLG_RELS|FLG_BORD); // title("http://www.dorkbot.org/dorkbotbristol/", 3.75, BOT|CENTRE, FLG_NONE); title("Bristol Hackspace", 3.75, BOT|CENTRE, FLG_NONE); pen(UP); turn(-90.0); forward(1.9 * size); turn(180.0); pen(DOWN); colour(BLACK); tree(level, size); show(); return (0); }
int do_it(turtle_t *befehle, int anzahl) { int i; for (i = 0; i < anzahl; i++) { turtle(befehle[i].befehl,befehle[i].p1,befehle[i].p2); } }
int main(int argc, char **argv) { ros::init(argc, argv, "turtlemove"); ROS_INFO("Initialized ROS."); ros::NodeHandle nodeHandle; MyLittleTurtle turtle(nodeHandle); turtle.move(); ROS_INFO("Bye!"); return 0; }
void lawnmower(void) { srand(time(NULL)); border_t check; while(1) { turtle("fd", rand()%RANDMOVE_MAX, NOP); check = checkBorder(); switch (check) { case INSIDE: turtle("sh", rand()%360, NOP); break; case NORTH: turtle("sh", 90 +rand()%RANDTURN_MAX, NOP); break; case EAST: turtle("sh", 180 +rand()%RANDTURN_MAX, NOP); break; case SOUTH: turtle("sh", (270 +rand()%RANDTURN_MAX)%360, NOP); break; case WEST: turtle("sh", rand()%RANDTURN_MAX, NOP); break; } } }
unsigned char * turtle_inplace( unsigned char * X, const unsigned int sz, const unsigned int w, unsigned char * (*f)(const unsigned int, unsigned char *, const unsigned char *, const unsigned int, const unsigned char *, const unsigned int), unsigned char * f_data, const unsigned int f_data_size) { unsigned char tmp[sz]; turtle(tmp, X, sz, w, f, f_data, f_data_size); memcpy(X, tmp, sz); return X; }
int turtle(befehl_t befehl, int p1, int p2) { int retval = -1; if ((strcmp(befehl, "fd") == 0) && (p2 == NOP) && (p1 >= 0)) { stepper(BOTH,VOR, p1); retval = 1; } else if((strcmp(befehl, "bk") == 0) && (p2 == NOP) && (p1 >= 0)) { stepper(BOTH,RUECK, p1); retval = 1; } /* NG: Mit achsenabschnitt 25 cm kann man nicht nur um 1 grad drehen, da die drehung um 1 grad 0,47cm lauflänge beträgt. * Dies wird entweder abgerundet auf 0 und nicht gedreht oder auf 1 und um 2 grad gedreht. * Die Steppermethode hat jedoch die Vorgabe das der Parameter distanz in cm angegeben wird. */ else if((strcmp(befehl, "rt") == 0) && (p2 == NOP) && (p1 >= 0)) { stepper(M1,VOR, (p1*CMDEG)); retval = 1; } else if((strcmp(befehl, "lt") == 0) && (p2 == NOP) && (p1 >= 0)) { stepper(M1,RUECK, (p1*CMDEG)); retval = 1; } else if(strcmp(befehl, "go") == 0) { int i =0; do { int newx = p1-*px; int newy = p2-*py; double newh; /*if((newx == 0) || (newy == 0)) newh = *pa; else*/ { newh = atan2(newy,newx); if(newh >= 0) newh = (newh * 180 / (M_PI)); else newh = ((2*M_PI + newh) * 180 / (M_PI)); } if((p1 == *pa) && (p2 == *py)) { retval = 1; } else { turtle((befehl_t)"sh",(int)round(newh), NOP); turtle((befehl_t)"fd", (int)sqrt(newx*newx+newy*newy), NOP); } i++; } while(i<2); // NG: doppelt go ausführen weil wegen ungenauigkeit beim ersten mal die position knapp daneben liegt, zweiter lauf zur korrektur. } else if((strcmp(befehl, "sx") == 0) && (p2 == NOP)) { *px = p1; retval = 1; } else if((strcmp(befehl, "sy") == 0) && (p2 == NOP)) { *py = p1; retval = 1; } else if ((strcmp(befehl, "sh") == 0) && (p2 == NOP) && (p1 >= 0) && (p1 < 360)) { if (p1 > *pa) { turtle((befehl_t)"rt",abs(*pa-p1), NOP); } else { turtle((befehl_t)"rt",360 - abs(*pa-p1), NOP); } retval = 1; } else if((strcmp(befehl, "ho") == 0) && (p2 == NOP) && (p1 == NOP)) { turtle((befehl_t)"go", 0, 0); retval = 1; } return retval; }
void MyFrame::DrawTurtle() { Turtle turtle(this); turtle.Perform(); }