piotr147 / PolygonDrawer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Instrukcja aplikacji do rysowania wielokątów

Są dwa tryby: rysowania i "poruszania". Domyślnie włączony poruszania.

Oznaczenia relacji: kwadrat z dwoma kreskami- równoległość, kwadrat bez kresek- równa długość. Max 6 relacji.

Aby poruszyć wierzchołkiem/krawędzią należy na niego kliknąć myszką i (bez wciśniętego przycisku) poruszać myszką. Aby puścić krawędź/wierzchołek należy kliknąć myszką jeszcze raz.

Aby nałożyć relację należy kliknąć na przycisk "Set equal length" lub "Set parallel", kliknąć na pierwszą wybraną krawędź, a potem na drugą.
Aby usunąć relację należy kliknąć przycisk "Remove Relation" i kliknąć na jedną z krawędzi z pary, której relację chce się usunąć. 




W klasie Drawer znajdują się metody odpowiedzialne za rysowanie po bimapie.

W klasie Polygon znajduje się logika nakładania i zachowywania relacji.

W MainViewModel obsługiwane są wszystkie akcje użytkownika. 




Opis algorytmu: 

Utrzymywanie równoległości:
Gry poruszany jest jeden z wierzchołków krawędzi o tej relacji, to druga krawędź zmieniana jest tak, aby krawędzie wciąż były równoległe. 
Na podstawie tangensa kąta nachylenia pierwszej krawędzi, odpowiednio przestawiany jest wierzchołek drugiej.

Utrzymywanie równej długości:
Gry poruszany jest jeden z wierzchołków krawędzi o tej relacji, to druga krawędź zmieniana jest tak, aby krawędzie wciąż były równej długości. 
Na podstawie długości pierwszej krawędzi, odpowiednio przestawiany jest wierzchołek drugiej, tak aby krawędź była na tej samej prostej co wcześniej. 
(Przez operacje na liczbach całkowitych, prosta moze być trochę przechylana)

Gdy wierzchołek drugiej krawędzi relacji jest przestawiany przez algorytm, to sprawdzane jest czy może być tam ustawiony:
Jeśli druga krawędź wychodząca z tego wierzchołka nie ma relacji, to nie ma żadnych przeszkód.
Jeśli druga krawędź ma relację, to wywoływany jest algorytm utrzymywania tej relacji i sprawdzane jest czy może być przestawiony i tak dalej...
Jeśli algorytm przejdzie dookoła wielokąta lub zostanie przekroczona maksymalna liczba prób (3 * liczba wierzchołków wielokąta) to zwracany jest fałsz i nie można przestawić w ten sposób.

About


Languages

Language:C# 100.0%