/**
 * \brief Transform from current triangle to the target triangle
 */
Transform	Triangle::to(const Triangle& target) const {
	double	rotation = rotate_to(target);
	double	scale = scale_to(target);
	Transform	result(rotation, Point(), scale);
	Point	translation = target.basepoint() - result(basepoint());
	result = result + translation;
	return result;
}
Exemple #2
0
 void render_geometry(SDGeometryHandle handle, const SDVec2* translation, const SDfloat angle) {
     auto actor = stage()->actor(kglt::ActorID(handle));
     actor->move_to(translation->x, translation->y);
     actor->rotate_to(kglt::Degrees(angle));
 }
Exemple #3
0
//Hanterar de meddelanden som fås från styrenheten
//Det som sker till mesta del är konverteringar mellan tal till strängar eller tvärtom
//och förstås användandet av funktioner som var definierade i gyro.c och ultraljud.c
void message_handler(uart_message *message_in){

	int ANGLE = 0;
	double CALC_ANGLE = 0;
	uint8_t c;

	switch (get_cmd(message_in)){
		case 1:	//rotate
			{
				char *rot[1];
				rot[0] = malloc(4);
				send_message("accept", rotate, 1);
				ANGLE = (int) strtol((*message_in).data[1].data, (char **)NULL, 10);
				CALC_ANGLE = rotate_to(ANGLE);
				snprintf(rot[0], 4, "%d", (int) CALC_ANGLE);
				send_message("rotate", rot, 1);
				free(rot[0]);
			}
			break;
		case 2:	//distance
			c = (int) strtol((*message_in).data[1].data, (char **)NULL, 10);
			if(c == 0){
				send_message("accept", distance, 1);
				char* attr[6];
				int i; for(i = 0; i < 6; ++i){
					attr[i] = malloc(4);
					snprintf(attr[i], 4, "%u", get_sensor(i)->medDist);
				}
				send_message("distance", attr, 6);
				for(i = 0; i < 6; ++i){
					free(attr[i]);	
				}
			}else if(c > 0 && c <= 6){
				send_message("accept", distance, 1);
				char* attr[2];
				attr[0] = malloc(2);
				attr[1] = malloc(4);
				snprintf(attr[0], 2, "%u", c);
				snprintf(attr[1], 4, "%u", get_sensor(c-1)->medDist);
				send_message("distance", attr, 2);			
				free(attr[0]);
				free(attr[1]);
			}else if(c == 7){
				send_message("accept", distance, 1);
				refresh_sensors();
				char* attr[6];
				int i; for(i = 0; i < 6; ++i){
					attr[i] = malloc(4);
					snprintf(attr[i], 4, "%u", get_sensor(i)->medDist);
				}
				send_message("distance", attr, 6);
				for(i = 0; i < 6; ++i){
					free(attr[i]);
				}
			}else if(c == 8){
				send_message("accept", distance, 1);
				median_of_dists(3);
				char* attr[6];
				int i; for(i = 0; i < 6; ++i){
				attr[i] = malloc(4);
				snprintf(attr[i], 4, "%u", get_sensor(i)->medDist);
				}
				send_message("distance", attr, 6);
				for(i = 0; i < 6; ++i){
					free(attr[i]);
				}
			}else{
				send_message("denied", distance, 1);
			}
			break;
		case 3: //accept
			switch (get_validation(message_in)){
				case 0: //false
					break;
				case 1: //true
					break;
				default:
					break;
			}
			break;
		default:
			returnMessage[0] = (*message_in).data[0].data;
			send_message("denied", returnMessage, 1);
			break;
	}
}