Scratch detallado lineal → álgebra: encuentre las coordenadas de la intersección de dos segmentos de línea

        Alguien puede preguntar: ¿De qué sirve encontrar las coordenadas del punto de intersección? ¿Y por qué usar la sustitución de línea? ¿No funciona la ecuación de una línea recta? ? ?

        Para este problema solo puedo decir que el cálculo de la ecuación de la recta es demasiadas veces, y la dirección de la recta debe ser considerada en cada vuelta, la pendiente de una recta de 90° no existe, así que es mejor usar vectores (es decir, álgebra lineal) para calcular. En cuanto a lo que es útil, tal vez algunos algoritmos lo necesiten, como calcular si una línea se cruza con un rectángulo para hacer un juicio.

        Este tutorial implica menos contenido sobre la generación de líneas. Además de las ideas, también aprenderá:

        ¿Cómo verificar si dos segmentos de línea se cruzan? Propiedades de triángulos semejantes. dirección de un punto a otro. Conocimiento de funciones trigonométricas.

        Además, las características positivas y negativas del producto vectorial vectorial, el cálculo del producto vectorial vectorial, el cálculo del vector unitario, el método de representación vectorial de un punto a otro, el significado geométrico y el cálculo del producto cuantitativo (producto escalar) de vectores


Ejemplos de aplicaciones del álgebra lineal:

  1. Puntos de intersección (este tutorial)
  2. Divide un polígono cóncavo en triángulos (para renderizar)
  3. El punto más corto de una línea recta (producto cruzado)
  4. Problemas de juicio en varias direcciones.

Parte 1: ¿Cómo juzgar si los segmentos de línea se cruzan?

        Esta parte necesita entender primero el significado del producto cruzado vectorial, déjame hablar de ello de una manera simple

        Primero, mira la imagen de abajo.

        Tenemos dos vectores v y el vector w, luego el área del paralelogramo formado por v (se omite la palabra vector, lo mismo se aplica más adelante) y w es el resultado de v×w (× es el producto vectorial), pero el producto cruz tiene positividad ,

Si v está a la izquierda         de w , entonces v×w<0 (es decir, negativo),

Si v está a la derecha         de w , entonces v×w>0 (es decir, positivo),

        Cuando v coincide con w o es opuesto, es fácil pensar que el resultado es 0 (no estirado en un paralelogramo),

        En resumen, el sentido de las agujas del reloj es negativo y el sentido contrario a las agujas del reloj es positivo.

        Por cierto, para un vector [x1, y1] y un vector [x2, y2], su producto vectorial es el determinante de estos dos vectores (esta oración no se puede entender), es decir, x1*y2-x2*y1 .


        Con base en las conclusiones anteriores, podemos comenzar a estudiar cómo se cruzan dos líneas.

Diagrama de intersección

        Como se muestra en la figura, el segmento de línea AB interseca al segmento de línea CD, y los extremos de AB están conectados a CD para formar los vectores a, b, c, d.

        Encontramos que el resultado de multiplicar a por b es del mismo signo que el de d multiplicado por c.

        Veamos disjuntos.

diagrama disjunto

        El signo del vector a cruz multiplicado por b es el mismo que el de d cruz multiplicado por c

        Siguiente vistazo a especial.

disjunto especial

        Esta vez, una cruz multiplicada por b y una cruz d multiplicada por c tienen símbolos diferentes. Para este tipo de error, simplemente intercambie d y b, como se muestra en la siguiente figura:

        Corregido (tenga en cuenta que los puntos finales deben estar en el mismo lugar cuando se multiplican vectores de forma cruzada).

        ¡Esta vez, la cruz de a y b y la cruz de d y c tienen el mismo signo otra vez!

        En resumen, si a(x1, y1), b(x2, y2), c(x3, y3), d(x4, y4), (ambos son vectores), entonces mucho de lo anterior se puede expresar matemáticamente como la siguiente imagen:

        En la imagen de arriba, × representa la multiplicación cruzada, · representa la multiplicación y la multiplicación es mayor o igual que el mismo signo.

        O cambie "o" a "y", y luego cambie ≥ a <, entonces los segmentos de línea se intersecarán, de lo contrario no se intersecarán.


A continuación, ¡comienza a implementarlo con código!

        Aquí, simplemente hice un sistema de dibujo:

Luego, crea un bloque casero.

        Luego, podemos escribir dicho código para darnos cuenta de si los dos segmentos de línea se intersecan: primero calcule el vector de a, b, c, d, y luego de acuerdo con la fórmula del producto cruzado (no olvide, es el determinante: x1* y2-x2 *y1 ), para juzgar .

        ¿Cómo encontrar el vector ?

        Hay una fórmula para este problema, para el punto A(x1,y1) y el punto B(x2,y2) en el sistema de coordenadas rectangulares del plano , el vector AB es [(x2-x1),(y2-y1)]

        Vamos directo al código.

Calcular vector

        El primero es calcular el vector, luego guardarlo en el caché e inicializar el valor de retorno. A continuación, debemos realizar una multiplicación cruzada y juzgar si es <0, como se muestra en la siguiente figura:

producto cruzado y juez

        De esta manera, se completa un juicio de intersección de banana, pero si se juzga si el segmento de línea está en la línea, ¿cómo hacerlo?

        Sabemos que si el ángulo entre un vector y otro vector es 0° o 180°, entonces su producto vectorial es 0. Cuando están en la línea, los dos vectores apuntan a los otros dos puntos finales respectivamente, formando 180 grados;

        Si este punto está en la línea de extensión de otro segmento de línea, entonces el ángulo entre estos dos vectores es 0°;

        ¿Qué pasa si el punto está en el punto final?

        Piénsalo, entonces el módulo (longitud) de un vector es 0, parece que la multiplicación cruzada sigue siendo 0.

        Entonces la multiplicación cruzada de estas tres posibilidades será 0, podemos sumar un juicio igual a 0, y devolver el valor correspondiente. ,Como se muestra abajo:


Parte 2: Cálculo de puntos de intersección

        La parte 1 finalmente está terminada y el siguiente paso es el cálculo de las coordenadas de intersección.

1. Despeja tu mente.

Los segmentos de línea AB y CD se intersecan en el punto E

        Como se muestra en la figura, el punto H es el punto donde C se proyecta a AB, y G es el mismo. (La proyección es hacer una línea vertical hacia ella), y las longitudes de proyección son d1 y d2 respectivamente.

        Lo que estamos pidiendo son las coordenadas del punto E. Para esto déjame hablarte primero: ¿qué es un triángulo semejante? (Puede entenderlo en sexto grado, sáltelo para estudiantes de tercer grado en adelante)

dos triangulos

        Como se muestra en la figura, AB es paralelo a CF y DE es paralelo Debido a las líneas paralelas, sabemos que hay la mayoría de los mismos ángulos en la figura, que se han marcado en la figura.

        Observemos que los tres vértices (o dos) de estos dos triángulos son iguales (realmente), pero no son congruentes.Dos triángulos con tres vértices iguales así, los llamamos semejantes (no sé exactamente Inexacto, yo solo estoy en el primer año de secundaria ()

Para dos triángulos semejantes, las razones de las longitudes de         sus lados correspondientes son iguales . Por ejemplo:

        AB/BC=DE/DC, AB/DE=AC/CE。

        No sé si lo entiendes, pero eso es todo.

Mira la imagen ahora mismo:

Encuentre las coordenadas del punto de intersección E

        Primero, observamos el triángulo DGE y el triángulo CHE. Debido a que los dos ángulos opuestos son iguales (∠CEH y ∠GED), y debido a que son proyecciones, un ángulo mide 90 grados, por lo que los dos triángulos son similares .

        ¿semejanza? Esa es la proporción es igual! ¿No es que la razón del punto de intersección (x, y) a los dos puntos es la misma que la razón de d1 y d2? (d1/d2=EH/GE)

        A ver, ¿qué porcentaje de GH representa EH? Es EH/GH, ahora como la razón es la misma, podemos escribir EH/GH en la forma d1/(d1+d2) {es decir, EH/GH=EH/(EH+GE)=d1/ (d1+d2) }.

        De manera similar, GE/GH también se puede escribir en la forma d2/(d1+d2) {es decir, GE/GH=GE/(EH+GE)=d2/(d1+d2)}.

        Oye, el peso (proporción) es conocido, ¡las coordenadas son fáciles de manejar! (x, y) es la coordenada H * proporción + la coordenada G * proporción, es decir

Tenga cuidado de no invertir el peso


2. Calcular la proyección.

        Debes preguntarme: ¿Cómo cuentan d1 y d2? ? ? Además, ¿cuáles son sus coordenadas proyectadas? ? ?

        Se trata del significado geométrico del producto escalar vectorial (·) .

Diagrama de producto punto vectorial

        El significado geométrico del producto punto vectorial es la distancia entre el punto y el punto final después de que un vector se proyecta a otro vector y luego se multiplica por la longitud (longitud del módulo) del otro vector. En la figura, el vector AB·vector AD obtiene la longitud de AE, es decir, AC*AD.

        Producto escalar vectorial sentado fórmula 1 (sistema de coordenadas): a·b=(x1, y1)·(x2, y2)=x1*x2+y1*y2. Entre ellos, a y b son dos vectores, (x1, y1) y (x2, y2) respectivamente

        Fórmula de producto escalar vectorial 2 (geométrica): a b=|a|*|b|*cosθ, θ es el ángulo entre a y b

        Fórmula del producto cruzado vectorial (geometría): a b=|a|*|b|*sinθ, θ es el ángulo entre a y b

        ¡Hey, encontramos una proyección! ¿ Qué sucede si la longitud del módulo (longitud) de b en la fórmula anterior es 1 ?

        Debido al significado geométrico del producto escalar, cuando el módulo de b es 1, a b es la proyección de a a b.

        Entonces podemos calcular la proyección .

"proyección"

        Dado un punto fuera de la línea (x0, y0) y dos puntos en la línea (x1, y1), (x2, y2), calcula el punto proyectado (x, y).

        ¿ Cómo proyectar el vector AB al vector AC ?

        Primero, encuentra el vector unitario de AC (la longitud del módulo es 1, púrpura), luego el vector AB·vector púrpura, obtienes la longitud de AD, y finalmente, encuentra la dirección de AC, y mueve la longitud de AD en el dirección de AC, que es el punto D Las coordenadas de los amigos. (sí)

        En cuanto a cómo encontrar la dirección de CA, puede usar la función trigonométrica inversa: arctan para encontrarla. No diré mucho aquí, solo cargue el código directamente.

        A continuación, ¿cómo encontrar el vector unitario?

        Para un vector [x,y], su vector unitario es [x/√(x^2+y^2), y/√(x^2+y^2)], que en realidad es el vector dividido por el módulo longitud. Como se muestra abajo:

fórmula vectorial unitaria

        Entonces solo quedan los puntos.

producto punto

        A continuación podemos calcular la proyección.

La mitad de la proyección (porque se puede usar el caché, se usan los penúltimos elementos 1 y 2)

        Ah, encontramos la longitud y la dirección de AD, pero ¿cómo sabemos sus coordenadas horizontales y verticales?

Encuentra A'B y BD

        Esto es parte de la imagen ahora mismo. Lo que queremos es la longitud x y la longitud y de AB (diferencia en coordenadas horizontales y verticales), es decir, A'B y BD

        Como ∠AA'B=90°, el triángulo AA'B es un triángulo rectángulo

        Para los triángulos rectángulos, tenemos un teorema: hay una razón fija de los tres lados del triángulo para cada ángulo.

        Es decir, en el triángulo AA'B se fijan los valores de A'B/AB y AA' (la longitud es BD)/AB.

        Aquí, llamamos AA' al lado adyacente al ángulo a, A'B al lado opuesto al ángulo a, y AB a la hipotenusa del ángulo a. (no puedo recordar)

        A la razón del cateto opuesto a la hipotenusa la llamamos seno, que se registra como sen, es decir, sen a=recto/oblicuo;

        La razón del lado adyacente a la hipotenusa se llama coseno, que se registra como cos, es decir, cos a=adyacente/oblicuo;

        También hay funciones como la tangente (tan) y la trigonometría inversa. Si estás interesado, puedes buscar por ti mismo. Esta vez solo usamos seno y coseno.

        Conocemos el valor de AB y el ángulo a, entonces A'B y A'A son fáciles de encontrar,

        sin a=A'B/AB, AB*sin a= A'B/AB*AB= A'B (¡Descúbrelo!)

        cos a=A'A/AB,AB*cos a= A'A/AB*AB= A'A

        Luego se calcula la diferencia entre las coordenadas horizontal y vertical, y el código es el siguiente:

proyección

        No olvides calcular también la distancia de proyección (Teorema de Pitágoras)

        El código final se muestra en la figura.

        cambiar código de dibujo

imagen

        Encontramos que la proyección es una línea vertical, lo que indica que el programa es normal. (¡Debes desarrollar el hábito de probar cuando haces programas!) ¡Maravilloso!


3. Calcula las coordenadas de intersección

fórmula recién lanzada

        Esta es la fórmula de coordenadas del punto de intersección que acabamos de lanzar. Aquí, podemos calcular d1, d2 y x6, y6, x5, y5, ¡entonces saldrá x, y!

        Primero, necesitamos proyectar un segmento de línea en otro segmento de línea

Parte de las coordenadas de la intersección del segmento de línea

        Luego, calcula el peso de cada punto (es decir, d1 d2):

Una parte de las coordenadas de la intersección del segmento de línea*2

        Finalmente, el peso se multiplica por las coordenadas del punto y se suma, que son las coordenadas del punto de intersección.

Coordenadas de intersección del segmento de línea (completas)


Parte 3: final

        En este punto, se han completado las coordenadas del punto de intersección de los dos segmentos de línea, el siguiente es el código completo:

todos los códigos

        En las áreas de dibujar y mover, agregué variaciones de transparencia para evitar confusiones.

        Vamos a probarlo.

Mostrar resultados


Enlace de descarga de recursos

        Si no desea escribir código, puede descargar este recurso de apoyo: Scratch Tutorial Works: Line Segment Intersection Coordinates

        Gracias por el apoyo

Supongo que te gusta

Origin blog.csdn.net/leyang0910/article/details/132006576
Recomendado
Clasificación