2 votos

Clasificar el círculo en un plano con "izquierda" y "derecha" en relación con una línea.

CONTEXTO:

Estoy haciendo una simulación en Programación Orientada a Objetos. Tengo un montón de círculos con propiedades:

Ubicación = Vector con coordenadas x e y

Ángulo = Vector que determina "hacia dónde" mira el círculo

DetectionRadius = Un círculo más grande, queremos interactuar sólo con otros círculos situados dentro de ese círculo.

Así que tengo mi círculo central y el círculo secundario alrededor del plano. Tengo acceso a todas las propiedades del círculo en un array. Mi pregunta es:

PROBLEMA:

¿Cómo puedo determinar qué círculo está a la izquierda de mi círculo central y cuál está a la derecha?

Aquí hay una imagen para entender mejor lo que quiero decir: Imagen1

(El círculo principal está en el centro, la línea negra es el vector de ángulo (podemos extenderlo a una línea si es necesario), el círculo azul es el radio de detección y los otros círculos verdes son círculos secundarios)

Ya sé qué círculo secundario está en el radio de detección del círculo principal. Sólo necesito saber cuáles están a la izquierda y cuáles a la derecha.

Gracias.

2voto

ploosu2 Puntos 2403

Forma la ecuación de la recta. A continuación, se puede responder a la pregunta de en qué lado de la recta se encuentra un punto calculando el valor de la función definitoria (lineal) de la recta. En la recta su valor será $0$ . El valor es positivo/negativo si el punto está a la izquierda/derecha (cuando se mira hacia la dirección del vector que define la línea).

En este caso obtenemos la ecuación de la recta como (nótese que los coeficientes hacen una rotación de 90 grados del vector dirección dado, ya que para estar en la recta significa que el producto interior con su vector normal sea cero, también necesitamos una traslación desde el punto $C$ al origen allí)

$$l(x,y) = -\sin(\alpha) (x-c_x) + \cos (\alpha) (y-c_y)$$

donde $\alpha$ es el ángulo y $(c_x, c_y)$ es el centro del círculo central. Pruébelo aquí .

0voto

Joffan Puntos 7855

Si tomas el vector "punto de vista" $\vec v$ y construir un vector de longitud unitaria ortogonal a éste, se puede tomar la posición vectorial (relativa) de los centros de los otros círculos $\{\vec c_i\}$ y obtener no sólo si están a la izquierda o a la derecha de la línea, sino si cortan la línea de visión.

Para obtener un vector ortogonal en sentido contrario a las agujas del reloj (girado a la izquierda), basta con cambiar $\vec v=(x,y)$ coordenadas del vector punto de vista a $\vec v^\perp=(-y, x)$ . Dividir ambas ordenadas por la magnitud $|\vec v|$ para obtener su vector de pruebas unitarias $\vec t = \frac{\vec v^\perp}{|v|}$ .

Entonces toma el producto punto de cada círculo vectorial que debe evaluarse para obtener un conjunto correspondiente de valores (escalares) $\{\vec t\cdot \vec c_i\}$ . El producto de puntos es eficiente para calcular: $(a,b)\cdot(c,d) = ac+bd$ . Un valor positivo significa que el círculo $i$ está a la izquierda; un valor negativo está a la derecha, y el valor absoluto te da la distancia de la línea que está - así que comparando con el radio del círculo secundario te dirá si corta la línea.

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X