Я бы создал бы круг вокруг точки (x, y) с вашим радиусом расстояния, а затем использовал приведенную ниже информацию для создания треугольника, высота которого больше радиуса.
Затем, используя эти два многоугольника, выполните ST_Intersection между двумя геометриями.
ПРИМЕЧАНИЕ: Этот метод работает, только если угол меньше 180 градусов.
Обратите внимание, чтоесли вы вытянете внешние края и встретите его под углом 90 градусов от средней точки вашей дуги, у вас есть угол и соседняя сторона.Теперь вы можете SOH CAH TOA!
Получить очки B и C
Пусть точка A = (x, y)
Получитьверхняя точка:
точка B = (x + радиус, y + (r * tan (угол)))
, чтобы получить нижнюю точку:
точка C =(x + радиус, y - (r * tan (угол)))
Поверните свой треугольник к себе по азимуту
Теперь, когда у вас есть треугольник, вам нужно повернуть его к своему азимуту,с точкой поворота A. Это означает, что вам нужна точка A в начале координат, когда вы делаете вращение.Вращение - самая сложная часть.Его используют в компьютерной графике все время.(На самом деле, если вы знаете OpenGL, вы можете заставить его выполнять вращение за вас.)
ПРИМЕЧАНИЕ: Этот метод вращается против часовой стрелки на угол (тета) вокруг начала координат.Возможно, вам придется соответствующим образом изменить свой азимут.
Первый шаг: перевести ваш треугольник так, чтобы A (ваш исходный x, y) был в 0,0.Что бы вы ни добавили / вычли из x и y, сделайте то же самое для двух других точек.
(вам нужно перевести это, потому что вам нужно, чтобы точка A находилась в начале координат)
Второй шаг: Затем поверните точки B и C, используя матрицу вращения.Больше информации здесь , но я дам вам формулу:
Your new point is (x', y')
Сделайте это для точек B и C.
Третий шаг: Переведите их обратно в исходное место путем сложения или вычитания.Если вы вычли x в прошлый раз, добавьте его на этот раз.
Наконец, используйте точки {A, B, C} для создания треугольника.
И затем выполните ST_Intersection (geom_circle, geom_triangle);
Поскольку для этого требуется много вычислений, было бы лучше написать программу, которая выполняет все эти вычисления и затем заполняет таблицу.