Dzień dobry,
potrzebuję napisać program żeby układał strukturki podbne jak tutaj: http://puzzlezapper.com/blog/2012/01/polycircles/ (tyle, że ja ma tylko 4ry rodzaje struktur -mam już je napisane w C++), ale chcę by układał je podobnie jak tu: http://puzzlezapper.com/blog/2012/02/polypennywise/ -czyli, żeby były układane jak najbliżej siebie (mają się stykać, ale nie nachodzić na siebie) -niestety nie wiem, jaki kod wpisać do programu, żeby tak się układały. Nie mam na to pomysłu.
Inną sprawę jest, że jednego rodzaju struktur ma być ok 80% a reszta random:) -ale myślę, że to jest łatwe do zrobienia.
mam te struktury napisane w C++ (2D), a także narysowane w 3D i 2D w CADzie, ale tego chyba nie da się zaimplementować.
Chodzi o to, żeby one były tak blisko siebie ułożone przez program ja w przykładzie.
Nie wiem czy wyraziłem się jasno, jeśli będzie potrzeba mogę rozwinąć temat i odpowiedzieć na wszystkie pytania. Jeśli ktoś robił coś podobnego i wie jak się do tego zabrać prosiłbym o pomoc.
może uproszczę i uściślę, chodzi o taki algorytm który będzie rysował kolejne grupy kół obok innych tak by przylegały, ale się nie przecinały. Pisał może kiedyś ktoś coś takiego?
Ogarnij podstawy geometrii analitycznej na początek.
Obszar po którym rysujesz traktujesz jako pierwszą ćwiartkę układu współrzędnych.
Zacznij od czegoś takiego może:
http://www.geometryexpressions.com/explore.php?p=04-Examples%2F02-Example_Book%2F04-Circles&f=Example_094_The_Triangle_Tangential_To_3_Tangential_Circles.htm
Widzisz trójkąt równoboczny ABC? Wystarczy na jego wierzchołkach opisać okręgi o promieniach równych połowie długości krawędzi tego trójkąta (D).
Wybierasz sobie losowo dwa wierzchołki trójkąta, a trzeci obliczasz analitycznie...
Jak już będziesz miał taki trójkąt to możesz obliczyć wierzchołek następnego trójkąta, przylegającego do tego trójkąta i w ten sposób będziesz miał czwarte koło przylegające do pozostałych, itd, itd....
Kolega mk, z którym mam zaszczyt współpracować przy tworzeniu programu, trochę niezrozumiale opisał problem. Chodzi o układanie obok siebie kół o różnych promieniach, losowanych w trakcie wykonywania przez program rysunku. Rozwiązanie z trójkątem równobocznym nie jest więc tutaj odpowiednie.*
Program ma wybrać promień a następnie narysować koło w takim miejscu aby przylegało do innych, narysowanych już kół. Cała kanwa rysunku musi być zapełniona kołami tak szczelnie, jak to widać na załączonych w pierwszym poście rysunkach.
Myśleliśmy o zastosowaniu algorytmu genetycznego ale mamy jeszcze nadzieję, że uda się ten problem rozwiązać w prostszy sposób.
- Dokładnie to kół o określonym promieniu ma być 80%, promienie reszty kół mają być dobierane losowo z zadanego przedziału wartości. Obawiam się, że nie jestem w stanie uzyskać dokładnej liczby odpowiadającej 80% wszystkich narysowanych kół. Losowy charakter procesu rysowania uniemożliwia bowiem dokładne wyznaczenie liczby wszystkich kół. Więc musi być to wartość przybliżona. Ale to problem poboczny.
teraz pytanie. Czy koła maja być rozsiane dowolnie (byleby się stykały), czy mają być może upakowane optymalnie w jakiejś określonej przestrzeni?
Ogólnie jakie macie więzy na ten problem (poza stykaniem się kół).
Te 20% kół to jak się ma do promienia pozostałych kół? Czy to są ziarna piasku między kamieniami?
Losujecie punkty a i b, promienie a, b i c:
Sposób na policzenie wsp. punktu C:
http://www36.zippyshare.com/v/28289865/file.html
Popiłem trochę więc nie ręczę za to.