Autor: Klamud
Versión: :GM8:
Descripción: Define un rectángulo rotado y revisa si un punto está dentro del rectángulo. Lo mismo se puede hacer con image_angle, pero este script debe tener mayor precisión.
punto_en_rect_rotado( x,y, u,v, w,h, px,py, angulo );
[gml]
///punto_en_rect_rotado( x,y, u,v, w,h, px,py, angulo );
/* 0 1 2 3 4 5 6 7 8
PUNTO EN RECTANGULO ROTADO
x,y: punto de rotacion en room
u,v: punto de rotacion en rectangulo
w,h: anchura y altura
px,py: punto de prueba
angulo: angulo en grados
*/
var Ax,Ay, Bx,By;
//vector A
Ax = argument6 - argument0;
Ay = argument7 - argument1;
//rotar vector y sumar uv
Bx = lengthdir_x(Ax,argument8) + lengthdir_y(Ay,argument8) + argument2;
By = lengthdir_x(Ay,argument8) - lengthdir_y(Ax,argument8) + argument3;
//resultado
return Bx>0 and Bx<argument4 and By>0 and By<argument5;
[/gml]
Ejemplo adjunto.
hmm, esto se puede utilizar, por ejemplo para detectar estas figuras si coinciden, y la diferencia en el caso de que no?, no sé si mexplico... xD
Creo que no texplicas, ¿te refieres a calcular la distancia entre dos rectángulos rotados y saber si hay intersección?, en ese caso, este script sí se puede usar para una parte del proceso; como sea, me diste ideas para otros scripts.
esactamente saber esa distancia, en grados o radianes, pero la distancia que hay, no en si hay colision o no, sino en que coincidan en el mismo lugar que seria distancia 0... digamos, como los juegos musicales como ddr o stepmania, que vienen las flechas, y has de darle justo y a mas cerca mas puntos... pues lo mismo pero con rotacion entre dos rectangulos en este caso :B