Dlaczego moje podziały trójkąta dwudziestościanu nie są równoboczne (PostGIS)?

Nov 24 2020

Tworzę geodezyjnej wielościan korzystając PostGIS. Ja podzielenie podstawy Icosahedron punktów (patrz załącznik A) , do pierwszego poziomu klasy I podrozdziały.

Ustawić

Dla uproszczenia weźmy tylko pierwszy trójkąt utworzony przez te punkty:

CREATE TABLE pix (
    id bigserial
  , name text
  , geog geography(POINT,4326) -- use WGS84
);

insert into pix values (DEFAULT, 'China', st_point(122.3, 39.1));
insert into pix values (DEFAULT, 'Norway', st_point(10.53619898, 64.7));
insert into pix values (DEFAULT, 'Arabian sea', st_point(58.15770555, 10.44734504));

Który tworzy podstawowy trójkąt dwudziestościanu

Numery boków trójkąta odpowiadają numerom wierszy wyświetlanych w tabeli wygenerowanej przez to zapytanie

select p1.name
  , p2.name
  , st_distance(p1.geog, p2.geog) as dist
from pix p1
  cross join pix p2
where p1.id < p2.id

Punkty są mniej więcej w równej odległości. Występują niewielkie wariancje, ponieważ wydaje się, że powyższe dane nasion zostały wygenerowane przy założeniu kuli, a nie sferoidy, do której powraca st_distance - use_spheroid falsein st_distanceprzyniesie znacznie bliższe odległości, ale należy zauważyć, że użycie falsewe wszystkich przedstawionych zapytaniach nie zmienia opisanego poniżej problemu.

Pierwszy poziom podrejonu klasy I.

insert into pix (name, geog)
select p1.name || '-' || p2.name
  , st_project(p1.geog, st_distance(p1.geog, p2.geog) / 2, st_azimuth(p1.geog, p2.geog)) as geog
from pix p1
  cross join pix p2
where p1.id < p2.id

Powyższe generuje punkty środkowe każdej z par punktów na oryginalnym trójkącie

A te mają następujące odległości, wygenerowane przez to zapytanie

select p1.name
  , p2.name
  , st_distance(p1.geog, p2.geog) as dist
from pix p1
  cross join pix p2
where p1.id < p2.id
  and p2.id > 3
order by dist

Problem

Odległości segmentów 7, 8 i 9 (około 4000 km) są znacznie większe niż odległości segmentów 1-6 (około 3500 km).

Dlaczego ten algorytm nie tworzy czegoś bardziej zbliżonego do trójkątów równobocznych? Czy mój wykorzystanie st_azimuthi st_projectzłe? A może przegapiłem trochę bardziej podstawowych matematyki na temat rzutowania punktów na sfery?

Odpowiedzi

3 GevaertJoep Nov 28 2020 at 23:35

Tak, jest to spowodowane rzutowaniem dwudziestościanu kaflowego na sferę. Myślę o tym procesie jako:

Weź zwykły dwudziestościan, wszystkie rogi leżą na tej samej kuli, a zatem odległość jest taka sama, gdy jest rzutowany na kulę. Jeśli jednak weźmiemy nasz nieprzewidziany dwudziestościan i podzielimy wszystkie trójkąty, wygenerowane punkty nie będą znajdować się na tej sferze. Kiedy te przesuną się na zewnątrz, będą większe, jak czerwone trójkąty na tym obrazku.

Również te konstrukcje są wykorzystywane w architekturze. Korzystając z kalkulatora kopuły geodezyjnej (zdjęcie z ich strony), dla długości krawędzi B wynoszącej 3,5, odpowiadająca długość dla A wynosi 3,9:

Więc rzeczywiście to była matematyka, której przegapiłeś.