Como funciona CreateDynamicPolygon y CreateDynamicRectangle
#3

Para empezar tienes que saber que: un polнgono es una figura plana compuesta por una secuencia finita de segmentos rectos consecutivos que cierran una regiуn en el plano.

Es decir, una cantidad de segmentos rectos que se juntan por los extremos y encierran una superficie llamada бrea. Dependiendo de la cantidad de segmentos, nuestro polнgono recibirб distintos nombres (triбngulo, pentбgono, octбgono, etc.).

Entonces, concluyo que un polнgono ha de tener mнnimo tres lados para poder encerrar una superficie.



[*] Por ejemplo:

Esta figura es un polнgono de cuatro lados, a su vez, recibe el nombre de cuadrilбtero. Cada esquina (donde se juntan dos rectas) es un punto, entonces en este caso, tenemos cuatro puntos.

Entonces, llevбndolo al mundo del SA-MP, tendrнamos cuatro puntos de coordenadas:
  • Punto A: ax, ay, az
  • Punto B: bx, by, bz
  • Punto C: cx, cy, cz
  • Punto D: dx, dy, dz


Vayamos ahora al tema de Incognito, donde nos ha dejado esta nota interesante:
Quote:
Originally Posted by Incognito
The points in CreateDynamicPolygon and CreateDynamicPolygonEx need to be specified as a sequence of ordered pairs (x1, y1, x2, y2, ..., xn, yn). The number of elements in the array must be divisible by two for this reason. The first point must also be equal to the last point to form a closed path.
Quote:
Originally Posted by Incognito
Los puntos en CreateDynamicPolygon y CreateDynamicPolygonEx deben estar definidos como una secuencia de parejas ordenadas (x1, y1, x2, y2, ..., xn, yn). Debido a lo anterior, el nъmero de elementos de la matriz ha de ser divisible por dos. El primer punto ha de ser igual al ъltimo para formar un camino cerrado.
Entonces, entendemos que tenemos que crear una matriz de la siguiente manera:
pawn Код:
new Float:Puntos[] = {
    x1, y1,
    x2, y2,
    x3, y3,
    ......,
    xn, yn
};
En nuestro caso, como tenemos cuatro puntos, serнa asн:
pawn Код:
new Float:Puntos[10] = {
    ax, ay,
    bx, by,
    cx, cy,
    dx, dy,
    ax, ay /* El ъltimo punto, ha de ser igual al primer punto para cerrar la figura. */
};

/* Como tenemos 10 valores en total (dos valores por cada posiciуn), le damos un tamaсo de 10 a nuestra matriz. */
En definitiva, deducimos que:
  • un polнgono ha de tener como mнnimo tres lados para encerrar un бrea.
  • no podemos definir la altura del бrea ya que usamos posiciones en dos dimensiones (x, y).
  • el ъltimo punto ha de ser igual al primer punto para trazar una recta que encierre el бrea del polнgono.


Una vez entendido esto podemos seguir adelante, vamos a mirar la funciуn en sн:
pawn Код:
native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
Quote:
  • Points: puntos que hemos definido anteriormente.
  • minz/maxz: esto define la altura de nuestro polнgono, aquн podemos introducir valores del eje Z para definir una altura determinada, o bien poner -FLOAT_INFINITY/FLOAT_INFINITY para detectar cualquier posiciуn por encima/debajo del polнgono.
  • maxpoints: nъmero total de puntos que definen nuestro polнgono.
  • worldid/interiorid: si se introduce un valor distinto de -1, el polнgono solo tendrнa efecto en ese Virtual World o Interior. Si dejamos -1, actuarб en todos los Virtual Worlds e Interiores.
  • playerid: Si se introduce un valor distinto de -1, solo actuarнa para el jugador con esa ID. Si dejamos -1, actuarб para todos los jugadores.
Una vez sabemos todo esto, y con los datos que tenemos, podrнamos crear nuestro polнgono:
pawn Код:
new Float:Puntos[10] = {
    ax, ay,
    bx, by,
    cx, cy,
    dx, dy,
    ax, ay
};

CreateDynamicPolygon(Puntos, -FLOAT_INFINITY, FLOAT_INFINITY, sizeof(Puntos), -1, -1, -1);
Y ya con esto tendrнamos un polнgono definido, y con las demбs funciones de las бreas podemos programar lo que queramos.

Respecto al rectбngulo, OTACON explica aquн perfectamente como sacar Float:minx, Float:miny, Float:maxx, Float:maxy.

Un saludo.


PD: explicaciуn a groso modo.
pawn Код:
new Float:Puntos[10] = {
    ax, ay,
    bx, by,
    cx, cy,
    dx, dy,
    ax, ay
};

/*
1є. Recta de (ax, ay) a (bx, by).
2є. Recta de (bx, by) a (cx, cy).
3є. Recta de (cx, cy) a (dx, dy).
4є. Recta de (dx, dy) a (ax, ay).
*/


/* De esta manera, encerramos un бrea, eso explica estos puntos que hemos usado. */
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 3 Guest(s)