Być może tytuł zapytania wymaga pewnej pracy.

W kontekście jest to dla celów śniegu Kocha (stosując składnia matematyki C-podobnej w węzła formuły w Labview), dlatego, dlaczego trójkąt musi być właściwy sposób. (Zgodnie z 2 punktami trójkąt równoboczny może być w jednym z dwóch kierunków).

Krótko przejdą algorytm: Mam tablicę 4 predefiniowanych współrzędnych początkowo tworzących trójkąt, pierwsze "pokolenia" fraktali. Aby wygenerować następną iterację, należy do każdej linii (para współrzędnych), otrzymuje punkty środkowe 1 / 3rd i 2 / trzecia, aby była podstawą nowego trójkąta na tej twarzy, a następnie Oblicz położenie 3-punktowego punktu nowego trójkąta (przedmiot tego pytania). Zrób to dla wszystkich boków, połączając wynikające z uzyskanych tablic w nowej tablicy, która tworzy następną generację płatka śniegu.

Szereg współrzędnych jest w porządku zgodnie z ruchem wskazówek zegara, np. Każdy wierzchołek podróżujący zgodnie z ruchem wskazówek zegara wokół kształtu odpowiada następnym elemencie w tablicy, coś takiego dla drugiego pokolenia:

index vs vertices

Oznacza to, że podczas dodawania trójkąta na twarz, np. Pomiędzy, na tym obrazie wierzchołki oznaczone 0 i 1, najpierw zdobędziesz punkty środkowe, które zadzwonię "C" i "D", możesz po prostu obracać "D" anty -clock wokół " C "o 60 stopni, aby znaleźć tam, gdzie będzie nowy punkt górny trójkąt (oznaczony e).

new triangle

Wierzę, że powinno to posiadać (np. 60 stopni w kierunku przeciwnym do ruchu wskazówek zegara obracając się do późniejszego punktu wcześniej) dla w dowolnym miejscu wokół płatka śniegu, jednak obecnie moja matematyka wydaje się działać w przypadku, gdy początkowy trójkąt ma pionową stronę : [(0,0), (0,1)]. Inaczej mądry trójkąt wychodzi w inny kierunek.

Wierzę, że prawidłowo skonstruowałem moje pętle takie, że trójkąt generujący VI (instrument wirtualny, skutecznie "funkcji" w językach pisemnych) będzie działać na każdym segmencie linii sekwencyjnie, ale moje rzeczywiste obliczenia nie działa i jestem w stanie Jak zdobyć go we właściwym kierunku. Poniżej znajduje się moja obecna matematyka do obliczania punktów trójkąta z segmentu pojedynczego linii, gdzie a i b są oryginalne wierzchołki segmentu, c i d tworzą nowy trójkąt Baza, która jest w linii z oryginalną linią, a {x4}} jest częścią, która wystaje. Nie chcę nazywać tego "top", jak na trójkąt utworzony z segmentu, od górnego prawa do lewej dolnej części, "górna" będzie się trzymać.

cx = ax + (bx - ax)/3;
dx = ax + 2*(bx - ax)/3;


cy = ay + (by - ay)/3;
dy = ay + 2*(by - ay)/3;



dX = dx - cx;
dY = dy - cy;



ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;

Uwaga 1.0471975512 jest tylko 60 stopni w radianach.

Obecnie dla generacji 2 to sprawia, że to: (Uwaga Pozornie oddzielony trójkąt w lewo jest utworzony przez 2 trójkąty na górze i na dole posiadające swoje e wierzchołki spotykają się w środku i nie jest w rzeczywistości niezależnym trójkątem.)

horribly broken

Podejrzewam konieczność posiadania nieco różnych równań w zależności od pogody ax lub bx jest większe itp, być może coś wspólnego z tym, jak okresowość SIN / COS może być uwzględniona (coś o ćwiartkach Koordynuje sferyczne?), Ponieważ wygląda jak wtrącone trójkąty mają 60 stopni, tylko że kąt jest między niewłaściwymi liniami. Jednak jest to zgadywanie i nie jestem w stanie sobie wyobrazić, jak to zrobić programowo, mówiąc już na papierze.

Na szczęście Węzeł Maths Formula Węzeł umożliwia, jeśli i inaczej, które pozwoliłoby na wdrożenie , jeśli jest to przypadek, ale jak mówi, że nie jestem strasznie zaznajomiony z dostosowaniem się do tego, co naiwnie nazywam "ćwiartki rzecz "i nie jestem pewien, jak wiedzieć, który kwadrant jest w każdym przypadku.

To było długie i wędrujące pytanie, które nieuchronnie kusi bzdury, więc jeśli masz jakieś wyjaśniające pytania, skomentuj, a spróbuję naprawić wszystko / wszystko.

3
ch4rl1e97 26 listopad 2019, 02:21

1 odpowiedź

Najlepsza odpowiedź

Odpowiadając na moje własne pytanie dzięki @Johanc, niezależnie od tego, że był to przypadek tworzenia wielu drobnych zmian i rezygnacji tuż przed zdobyciem.

Prawidłowa formuła była to:

ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (-sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;

Wystarczy dodawać minus do drugiej funkcji sine. Należy pamiętać, że jeśli ktoś podróżował przeciwnym do ruchu wskazówek zegara, jeden byłby chciał obracać punkty zgodnie z ruchem wskazówek zegara, więc zamiast tego negowano funkcję pierwszej sinusa i drugiego dodatnia.

enter image description here

3
ch4rl1e97 25 listopad 2019, 23:57