• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

1.3K
Views
Proyección de un punto a un segmento de línea Python Shapely

Tengo un LineString definido por dos puntos, esencialmente un segmento de línea recta, y quería proyectar un punto sobre él. Conozco .interpolate .project Sin embargo, cuando el punto está "fuera" del segmento, no quiero el punto más cercano en el segmento, pero quiero extender el segmento y dibujar una línea que pase por el punto y sea ortogonal al segmento de línea (extendido). Quiero la coordenada de la proyección.

ingrese la descripción de la imagen aquí

Por ejemplo, si el punto está "dentro" del segmento

 from shapely.geometry import Point from shapely.geometry import LineString point = Point(0.2, 0.5) dist = LineString([(0, 1), (1, 1)]).project(point) list(LineString([(0, 1), (1, 1)]).interpolate(dist).coords)

¿Alguien sabe qué hacer cuando el punto está fuera del segmento?

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Probablemente sea más fácil hacerlo manualmente. Si denota el ángulo x - u - v como alpha , entonces

 cos(alpha) = (v - u).(x - u) / (|x - u|*|v - u|)

. denota el producto escalar, y | | representa la norma euclidiana. La distancia d de P(x) a u es por lo tanto:

 d = cos(alpha)*|x - u| = (v - u).(x - u) / |v - u|

Habiendo calculado d , el punto proyectado P(x) se obtiene fácilmente como:

 P(x) = u + d*(v - u)/|v - u|

La implementación:

 import numpy as np from shapely.geometry import Point from shapely.geometry import LineString point = Point(0.2, 0.5) line = LineString([(0, 1), (1, 1)]) x = np.array(point.coords[0]) u = np.array(line.coords[0]) v = np.array(line.coords[len(line.coords)-1]) n = v - u n /= np.linalg.norm(n, 2) P = u + n*np.dot(x - u, n) print(P) #0.2 1.
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error