Geometría computacional ------- producto cruzado

Aplicación entre productos

El significado geométrico del producto cruzado
| c | = | a × b | = | a | | b | sinα (α es el ángulo entre los vectores ayb).
Inserte la descripción de la imagen aquí
Dados los vectores A y B, el resultado de A × B se muestra en rojo Según la regla de la espiral de la mano derecha, el dedo apunta a A y se cierra en la dirección de B. El pulgar es positivo para arriba y negativo para abajo .

Vector p = (a, b), q = (c, d)
p × q = ad - bc

solicitud

1. Calcule el área

Inserte la descripción de la imagen aquí
Vector p = (a, b), q = (c, d)
p × q = ad - bc = -q × p
El tamaño del producto cruzado es igual a 2 veces el área del triángulo (el resultado del producto cruzado es el valor absoluto )

2. Juzgar la relación entre el punto y la línea recta

Sea el vector P = (x1, y1), Q = (x2, y2)

P × Q
①Si el resultado es positivo, P está en el sentido de las agujas del reloj de Q;
②Si el resultado es negativo, P está en el sentido contrario a las agujas del reloj de Q;
③Si el resultado es cero, P y Q son colineales, es decir, paralelos, Puede estar en la misma dirección o en reversa

3. Encuentra la intersección de líneas rectas.

Suponga que la línea 1 pasa por dos puntos (x1, y1), (x2, y2) y la línea 2 pasa por dos puntos (x3, y3), (x4, y4).
Primero use la multiplicación cruzada para determinar si las dos líneas se cruzan:

int a=x2-x1,b=y2-y1;
int c=x4-x3,d=y4-y3;
int cha=a*d-b*c;

Si el producto cruzado cha no es igual a 0, entonces interseca, si es 0, entonces paralelo o coincide.

Encuentra el punto de intersección:

int a1=y1-y2;
int b1=x2-x1;
int c1=x1*y2-x2*y1;

int a2=y3-y4;
int b2=x4-x3;
int c2=x3*y4-x4*y3;

int D1=a2*b1-a1*b2;
int D2=a1*b2-a2*b1;

double X=1.0*(b2*c1-b1*c2)/D1;
double Y=1.0*(a2*c1-a1*c2)/D2;
cout<<"交点为:"<<X<<' '<<Y<<endl;

Supongo que te gusta

Origin blog.csdn.net/qq_40534166/article/details/99899524
Recomendado
Clasificación