Processing math: 100%

5 votos

Línea de intersección con el círculo en una esfera (globo o tierra)

Cómo puedo encontrar el punto de intersección de una línea y un círculo en una esfera (en tierra)

Por favor, si alguno sabe una buena solución ayuda.

Gracias respuesta :)

Imagine this on a globe or sphere

2voto

cjstehno Puntos 131

Para distancias tan cortas razonable de baja distorsión de la proyección de trabajo. Quizá la más simple es la de proyecto (lat, lon) a (R*lat, R*cos(lat0) * lon) donde R es el authalic de la tierra radio de 6371007.2 metros y lat0 es un típico latitud para resolver el problema, tales como la latitud del centro del círculo. Resolver el problema en esta proyección.

Ejemplo

Los datos de entrada son

c, a, b = (48.137024, 11.575249), (48.139115, 11.578081), (48.146303, 11.593102)
r       = 1000

Las ubicaciones se expresa como (lat, lon) en grados y la distancia en metros. Podemos encontrar el punto(s) de intersección en forma

x = a + t(b-a)

para algunos de los verdaderos valores del parámetro t. Deje X ser la proyección de x y C de la proyección de c. (Observe que, dado que la proyección es lineal, X = a + t(B-A), donde Una es la proyección de un y B es la proyección de b.) La definición de la ecuación es

r = Distance(X, C) = Norm(X - C) = Norm(A-C + t(B-A)).

El cuadrado ambos lados y en expansión,

r^2 = Norm(A-C + t(B-A))^2 = (A-C).(A-C) + 2(A-C).(B-A) t + (B-A).(B-A) t^2.

(donde ., como en (A-C).(B-A), denota el producto escalar). Esta ecuación cuadrática es fácilmente resuelto por dos valores de t que, cuando se conecta a la definición de la ecuación para x, dar hasta dos soluciones. Si una intersección a lo largo del arco ab es buscado, entonces sólo los valores de t entre 0 y 1 será válida.

Con los datos de la muestra, la solución es (48.142739, 11.585654). Utilizando los cálculos de la ITRF00 elipsoide, este punto es en realidad 1001.74 metros del centro, dentro del 0,3% esperado para la diferencia entre un esférico de cálculo (en el que la proyección se basa) y un elipsoidal de cálculo.

Aquí está (de trabajo, de pruebas) R código ilustra el cálculo completo.

# Constants
degree <- 2 * pi / 360
radian = 1 / degree
radius <- 6371007.2 # meters

# Input
a0 <- c(48.139115, 11.578081) * degree # Point A in (lat, lon)
b0 <- c(48.146303, 11.593102) * degree # Point B
c0 <- c(48.137024, 11.575249) * degree # Center
r <- 1000.0                            # Radius (meters)

# Projection
A <- a0 * c(1, cos(c0[1])) * radius
B <- b0 * c(1, cos(c0[1])) * radius
C <- c0 * c(1, cos(c0[1])) * radius

# Compute coefficients of the quadratic equation
v <- A - C; u <- B - A
alpha <- sum(u * u)
beta <- sum(u * v)
gamma <- sum(v * v) - r^2

# Solve the equation.
`%pm%` <- function(x,y) c(x+y, x-y)
t <- (-beta %pm% sqrt(beta^2 - alpha * gamma)) / alpha
t <- t[0 <= t & t <= 1]             # Limit the solution to arc a0-b0.
x <- (a0 + (b0-a0) %o% t) * radian  # Columns are (lat, lon)

La fórmula cuadrática se utiliza para la solución puede ser que necesite ser reemplazado por algo mejor en el fin de manejar los casos donde alpha es cercana a cero (es decir, cuando los puntos de a y b están muy cerca). También debe ser mejorado para detectar el caso beta^2 - alpha * gamma < 0, cuando no existen soluciones. Detalles reales dependen del entorno de programación: muchos de ellos ya buena fuente de ecuaciones que resuelven.

Si es mayor de 0.3% de precisión es necesaria, entonces es una proyección basada en un elipsoidal dato es requerido.

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