es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo graficar una línea en un espacio tridimensional con matplotlib

Tengo dos puntos en 3D, por ejemplo a = (100, 100, 10) y b = (0, 100, 60), y me gustaría ajustar una línea a través de esos puntos.
Sé que la ecuación de la línea en 3D puede tener diferentes formas:
Forma vectorial:
(x,y,z)=(x0,y0,z0)+t(a,b,c)

Forma paramétrica:
x=x0+ta
y=y0+tb
z=z0+tc

Pero tengo un problema para obtener los datos en la forma correcta para una función numérica.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ajustar una línea a través de dos puntos en 3D, podemos utilizar la forma vectorial de la ecuación de la línea en 3D. Los dos puntos dados, a y b, se pueden utilizar para encontrar el vector de dirección de la línea, que se calcula como:

    vector_dirección = b - a
    

    También necesitamos seleccionar un punto arbitrario en la línea, que podemos elegir como uno de los puntos dados (por ejemplo, a). Luego podemos escribir la ecuación de la línea como:

    (x,y,z) = a + t(vector_dirección)
    

    Para obtener esta ecuación en la forma requerida por una función numérica, podemos definir una función en Python que tome un valor escalar t y devuelva el punto correspondiente en la línea:

    import numpy as np
    
    def linea_a_traves_de_puntos(a, b):
        vector_dirección = b - a
    
        def línea(t):
            return a + t*vector_dirección
    
        return línea
    

    Esta función toma los dos puntos en 3D como entrada y devuelve una nueva función que se puede utilizar para evaluar la ecuación de la línea para cualquier valor de t. Por ejemplo, para obtener el punto en la línea en t=0.5 (es decir, a la mitad de los dos puntos dados), podemos hacer lo siguiente:

    a = np.array([100, 100, 10])
    b = np.array([0, 100, 60])
    
    función_linea = linea_a_traves_de_puntos(a, b)
    punto_en_linea = función_linea(0.5)
    
    print(punto_en_linea)    # salida: [50. 100. 35.]
    

    Esto nos debería dar el punto [50, 100, 35], que se encuentra en la línea a mitad de camino entre los dos puntos dados. Ten en cuenta que la salida es un array NumPy, que es la forma preferida de representar vectores y puntos en Python.

Comments are closed.