позвольте мне начать с того, что я прочитал Рассчитать точку A из заданной точки E и угла, а затем вычислить точку A из E и угла , Рассчитать точку, учитывая x, y, угол и расстояние , проблема с функциями тригонометрии и особенно Как получить координаты точки в системе координат на основе угла и расстояния , и ни одна из них не смогла подними завесу растерянности, окружающую меня.
Что я делаю: Я хочу создать некое мгновенное поле зрения (FOV) для набора последовательностей точек; поля зрения будут представлять то, что видно из каждой точки, в зависимости, конечно, от направления, в котором мы смотрим (0 - север; 90 - восток; 180 - юг; 270 - запад; 360 - север). FOV - это, по сути, треугольник, где центральной (C) вершиной является сама точка, вершина A и вершина B, чьи координаты я ищу, являются теми, которые связаны с основанием треугольника.
Фрагмент кода: Я, по сути, подхожу к этому, используя два прямоугольных треугольника, которые вместе составляют FOV, вот так:
--------- VERTEX -------------
for (p in 1:nrow(pnp.90.deg@data)){ #pnp is the spatial points dataframe, containing attribute information such as lon/lat(coordinates) and ca(camera angle - showing the direction of sight/movement in degrees)
a_alfa1 <- pnp.90.deg@data$ca - (pnp.90.deg@data$ca - 60)
a_alfa1rad <- a_alfa1 * (pi/180)
a_x1 <- pnp.90.deg@data$lon + 0.00035 * cos(a_alfa1rad)
a_y1 <- pnp.90.deg@data$lat + 0.00035 * sin(a_alfa1rad)
avert1 <- cbind(a_x1, a_y1)
colnames(avert1) <- c("lon", "lat")
avert.90<-SpatialPoints(avert1, proj4string=CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"), bbox=NULL)
}
--------- B VERTEX -------------
for (p in 1:nrow(pnp.90.deg@data)){
b_alfa1 <- pnp.90.deg@data$ca - (pnp.90.deg@data$ca + 60)
b_alfa1rad <- b_alfa1 * (pi/180)
b_x1 <- pnp.90.deg@data$lon + 0.00035 * cos(b_alfa1rad)
b_y1 <- pnp.90.deg@data$lat + 0.00035 * sin(b_alfa1rad)
bvert1 <- cbind(b_x1, b_y1)
colnames(bvert1) <- c("lon", "lat")
bvert.90<-SpatialPoints(bvert1, proj4string=CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"), bbox=NULL)
}
Результат: код создает треугольник, как и следовало ожидать, но это происходит только тогда, когда угол (ca) находится в диапазоне 0-90 градусов:
Проблема
Эта формула не работает для других ракурсов камеры. На мой взгляд (и согласно предоставленным ссылкам на темы) формула должна быть универсально применима для любого углового измерения. Может ли кто-нибудь предоставить некоторые сведения о том, правильно ли я использую формулу и правильно ли я ее использую.
ОБНОВЛЕНИЕ: ссылка на фрейм данных пространственных точек в формате шейп-файла:
https://drive.google.com/file/d/1ax5OG8c8Cl-Hz3N16ye9OoG4z7l8HSAQ/view?usp=sharing
ОБНОВЛЕНИЕ 2: процесс перехода от pnpover (общий spdf) к pnp.90.deg - это просто пространственное подмножество:
pnp.90.deg <- subset(pnpover, pnpover@data$ca <= 90)
Я решил создать углы обзора в диапазоне 0-90; 91-180; 181-270; 271-360, чтобы проверить, что идет не так.
Спасибо, любезно!