Rysowanie drzewa genealogicznego

0

Witajcie Swiaecznie :)

Zeby nie przytyc.. czas spalic pare kalori :) a informatyk najlepiej spala kalorie rzeźbiac ( w javie :D )

Takze, wysilcie ze mna umysly by znalezc rozwiazanie problemu :)

Otóż, muszę narysować drzewo genealogiczne, i mam problem z jego implementacja.

Otóż jak obliczyć, w którym miejscu ma sie która fotka ludka pojawic.

Bo o ile jestem w stanie zrobic to prosto dla Osoby 1A - 1B i nastepnie ich dzieci.. 2AB1, 2AB2, 2AB3 .. o tyle klopot sie rodzi pozniej..

zakladajac ze dziecko 2AB2 posiada 5 kolejnych dzieci, wtedy musze przesunac 2AB1 i 2AB3 by zrobilo sie miejsce. Tak sobie myslalam, by te partie rozwiazac za pomocą rekurencji, wiec liczyć, najpierw dla najbardziej wewnetrznej grupy.

Problem natomiast pojawia się, gdy po dodaniu malzonka/ malzonki osoby 2AB1 czy też malzonka jej Zstępnych. Muszę obliczyć, miejsce ulokowania ich krewnych, żeby mi się nie nalozyli na innych czlonków.

Macie jakieś pomysły ??.

0

Robiłem niedawno coś względnie podobnego (to akurat było rysowanie wielopoziomowego headera tabeli gdzie bylo wiele podpoziomów). Zacznij od wyliczenia najszerszego poziomu a potem już się wszystko powinno zmieścić ;]

0

Ustalasz zmienną Left=lewy_margines_strony;
Przechodzisz drzewo wg postorder, notując poziom numerowany od 0.
Kiedy docierasz do zdjęcia które teraz należy narysować rysujesz go w pozycji X, górny_margines_strony+poziom*(wysokość_zdjęć+margines_pionowy)
gdzie jeżeli zdjęcie nie ma dzieci to X=Left, po czym zwiększasz Left o szerokość_zdjęć+margines_poziomy
natomiast jak ma dzieci to gdzieś X wybierasz pomiędzy pierwszym a ostatnim dzieckiem, np dokładnie po środku.
Kreskę nad rysujesz przy okazji rysowania zdjęcia, o ile poziom nie zerowy.
Kreskę pod rysujesz po narysowaniu dzieci pod warunkiem że jacyś byli.

0

Dragon tylko pamietaj ze niektore dziecki moga byc przeplatane..
zalozmy ze mam rodzicow A -B i C - D
Dzieci AB1, Ab2, AB3 oraz CD1 i CD2

Dziecko AB1 ( kobieta) wyszla za CD1
zeby bylo symetrycznie i ladnie ustalilam ze Panowie po lewej, Panie po prawej. Czyli 2 generacja Wyglada tak

AB2 AB3 CD1 AB1 CD2

0

Jeżeli ktoś się powtarza to dajesz jakiś odnośnik gdzie się pojawił po raz pierwszy. Przeważnie "skaczą" kobiety.

0

przewaznie tak... :) aczkolwiek to drzewo jest robione dla specyficnzej rodziny.. wie cpo oznaczeniu jakiegos osobnika jako zalozyciel, cala jego linie oznaczam jako nieskaczaca :D

pomyslalam sobie aby moze zrobic to tak.

Klasa relacja :

Kobieta,
Mezczyzna

typ reacji ( tu cos typu zareczeni itd)
Tablica_dzieci[]
jakies inne ewentualne zmienne ...;

i potem jakis algorytm ktory obliczy jak to narysowac..

Bawilam sie troche rysowaniem po kanwie, ale tak sie zastanawiam, że lepiej byloby rysowac kazdego czlonka jak obiekt i potem jedynie zmianiac ich zmienne X i Y..

Pytanie moje tylko, w jaki sposob sie tak rysuje ?? abym mogla dowolnie przesuwac obiekty ?

0

Jak facet miał dwie żony i z każdej przynajmniej jednego potomka to nie możesz go zrobić nieskaczącym.

0

oczywiscie ze moge.

Jezeli facet nalezy do mojej rodziny.. to aktualna zona wskakuje na miejsce obok niego w drzewie. Zona juz nie aktualna, zostaje w swojej rodzinie i jedynie bedzie linia laczaca jego z ta kobieta. Tak samo jezeli bedzie mial tylko narzeczone z ktorymi beda dzieci.

Podobnie z Mezczyznami, ktorzy zenia sie z Kobietami z glownej lini.. obok corki / wnoczki itd... zalozyciela obecny bedzie jedynie aktualny maż.. wszyscy pozostali zostaja przy swoich drzewach.

Jezeli zadna z osob w relacji nie nalezy do glownego drzewa, to wtedy skacza zgodnie z zasada czy jest aktualna ? jesli tak -> to kobita skacze do drzewa meza

Dzieci domyslnie pojawiaja sie w Drzewie ( module) meza. chyba ze mowa o drzewie glownym, wtedy tam...

0

Dobra, przestaje rozumieć jak ty sobie to wyobrażasz. Może machnij w paincie jak ma wyglądać proste drzewko, Ojciec ma syna który z dwóch braków ma po parze dzieciaków, od ręki, niekoniecznie równe prostokąty zamiast zdjęć z literkami wewnątrz.

0

mniej wiecej chodzi o cos takiego :
user image
na zielono sa wszyscy którzy pochodza z glownej lini... sima oznaczonego jako zalozyciela + aktualny partner/partnerka .

Gdy nastepuje rozwod.. to byla zona, wraca do modulu swojej rodziny. ( zeby rozmiescic to dobrze na canvie pomyslalam o utworzeniu modulow)..

Docelowo, dziecko z nieistniejacego malzenstwa nalezy ZAWSZE do modulu glownej lini.. w przypadku pozostalych rodzin, ( w sensie rodzina szwagra wujka cioci mojej babci) dziecko bedzie zawsze w module ojca

0

Na takie coś prostego algorytmu nie będzie.
Poza tym tak jak to wymyśliłeś to masz jakiegoś dziwoląga:

  • na całym rysunku masz albo jednego przodka albo jednego potomka, a jak ma wyglądać kilka potomków dwojga rodziców?
  • co jak będzie miał trzy żony to gdzie pociągniesz trzecią kropkowaną linię?
  • jak będzie to wyglądało jeżeli drugi syn z trzech będzie miał dwie żony, nawet na bok nie ma gdzie kreskę pociągnąć?
    Wydaje mi się że wciąż sam nie wiesz jak to ma wyglądać.
    Może opisz formalne reguły gdzie kogo umieszczamy, wtedy będę mógł spojrzeć na to i wymyślić jakiś sensowny algorytm.

Udało mi się kiedyś zrobić takie drzewo z końmi, zasada była prosta klacz była częścią krawędzi przy linii męskiej, zaś przy linii żeńskiej ogier był częścią krawędzi.

0

Juz udzielam odpowiedzi na twoje pytania :

na całym rysunku masz albo jednego przodka albo jednego potomka, a jak ma wyglądać kilka potomków dwojga rodziców?

To jest wlasnie najwiekszy problem... po to wlasnie trzeba stworzyc algorytm by on INTELIGENTNIE to rozwiazal.
Generalnie zakladam, ze dokonanie zmiany w drzewie ( dodanie relacji), spowoduje uruchomienie algorytmu i przerysowanie drzewa.

Moznaby to zrobic jeszcze na zasadzia transformacji elementow.. ale jesli wstawimy relacje w jakies niefortunne miejsce to prawdopodobnie i tak bedzie trzeba wszystko przesuwac.. wiec moze tak za jednym zamachem :D

Dlatego to ile szerokosci zostawic na dzieci bedzie musial wyliczyc algorytm... przechodzac to w glab..

co jak będzie miał trzy żony to gdzie pociągniesz trzecią kropkowaną linię?

Rodzina zony i sama byla zona, znajduja sie w odrebnym module.

user image

Jak juz oblicze szerokosc kazdego z modulow, to ustalenie gdzie znajduje sie zona nie powinno byc az tak problematyczne ( szczegolinie gdy wpisze jej wartosci X i Y). Zeby linie sie nie nakladaly to moge policzyc ile jest tych bylych zon.. i 1 linie bedzie na wysokosci X, druka na Y = X +10 itd... w ten sposob unikne zbytniego nakladania sie..

0

Na INTELIGENTNIE rozwiązanie bez INTELIGENTNIE wymyślonych i podanych (zakodowanych) zasad musisz poczekać na powstanie sztucznej inteligencji.

0

oj wiem wiem ;D program bedzie tak inteligentyn jak ja :D ( o matko ... czyli zakrawal o imbecylizm :D ) ..

Zasady mam wymyslone, poniewaz, do tej pory tworzylam takie drzewo recznie w programie graficznym i bylo dobrze, teraz chcę by to robil program :)

Probowalam zakodowac relacje na kilka sposobow.

  1. Ojca i Matke, wpisuje jako pole obiektu dziecko. To mi super zalatwia problem oznaczenia Modulu.
    Nowy modul jest tworzony wtedy gdy nie ma ojca ani matki.. problem natomiast pojawia sie inny. Poniewaz docelowo chce by dzieci pojawialy sie w kolejnosci, przy czym kolejnosc dodania osoby do tablicy, nie musi byc rownoznaczna z kolejnoscia narodzin dzieci. ( uwaga nie mam czegos takiego jak rok urodzenia - bo to jest dla gry the sims tworzone)
    Wiec wtedy pojawia sie problem. Dodanie tablicy dzieci jako kolejne pole, raczej odpada, gdyz wtedy dochodzi do niepotrzebnej redundancji ( tablica bedzie i u matki i u ojca).. + koniecznosc dodatkowych warunkow.. gdy np ojciec mial w sumie 8 dzieci z roznymi kobietami..

  2. Tworze klase relacje. Relacja zawiera Pola
    Membres S1,
    Membres S2
    (jest tak dlatego, ze moze byc relacja homoseksualna, wtedy S1 to obiekt o mniejszym ID, w innym wypadku S1 to ojciec)
    List < Membres> children

mojTyp Typ relacji { prtnerstwo, narzeczenstwo, malzenstwo, neutralny}

boolean czyaktualna;

neutralny wtedy gdy ojciec i matka nie sa w ogole parą

Wtedy kolejnosc dzieci to kolejnosc dodania do tej malej tablicy i tam ewentualnie uzytkownik bedzie mogl zamieniac kolejnosc dzieci.

To co jeszcze zostaje, o czym nie wspomnialam, to to, że po konsultacji z ludzmi, ktorzy rowniez beda korzystac z tego programu dostalam wytyczne że osoba, która nie nalezy do zadnej relacji, czyli sama stanowi modul, ma byc tez narysowana na drzewie. Po prostu obok bez zadnego polaczenia.

W 1 sposobie jest to do narysowania prostrze.. w drugim tez mozliwe, ale musialabym za kazdym razem spradzac warunek.. czy istnieje relacja. i to wydaje mi sie bez sensu. Lub np, przy stworzeniu osoby, stworzyc dla niej też relację gdzie matka i ojciec to Nulle

0
Vanilka napisał(a):

oj wiem wiem ;D program bedzie tak inteligentyn jak ja :D ( o matko ... czyli zakrawal o imbecylizm :D ) ..
Skoro tak mówisz to zapewne nie jest tak źle bo każdy imbecyl uważa siebie za geniusza.

Mówiłaś o rysowaniu i nagłe przechodzisz do sposobu przechowania, wypadało by inny wątek na to?
W którymś filmie oglądałem że niby facet był genetyczną mieszanką siedmiu osób.
To tylko kwestia czasu (sądzę że dość krótkiego) kiedy będzie to możliwe w Sims'ach, w rzeczywistości pewnie ze 100 lat poczekamy na to.
Więc może warto się przygotować, bo jak to wprowadzą ten pierwszy sposób leży i kwiczy aczkolwiek w przypadku koni uznałem go za najlepszy.

Jak widzę wciąż nie masz sensownego pomysłu na reguły ułożenia tego na kratkach.

0

co masz na mysli mowiac ze nie mam sensownego sposobu ??

0

Skoro nie możesz odpowiedzieć na każde ewentualne pytanie dotyczące ułożenia rysunku ( np http://4programmers.net/Forum/1208423 ) to znaczy że nie masz jeszcze sposobu, jedynie jakiś: zarys/pomysł/itp.

0

nie no, opisalam Ci jak ja to widze, moze nie do konca wyraznie. Jezeli nie zrozumiales ktoregos z mojego zamyslu to ci moge dopowiedziec. Ale staralam ci sie wyjasnic o co mi chodzi ( + rysunek)

0

Na wskazane pytania nie odpowiedziałaś. Przedstawiony opis dotyczy przechowywania danych i trochę podziału na kartki (moduły) ale nie dotyczą samego rysowania czyli względnego rozmieszczenia zdjęć.

0

generalnie to jest to tak.

Osoby beda representowane przez zdjecie + podpis. Dla ulatwienia niech bedzie na poczatku tylko zdjecie o staleych wymiarach.

Panowie zawsze na lewo. Panie na prawo ( zwiazek)
Dzieci wyswietlane sa w kolejnosci z danego zwiazku. A rodzice, jezeli zwiazek jest aktywny sa na srodku lili laczacej dzieci.

Jezeli zwiazek jest nie aktywny, to partner wraca do swojego modulu. Dzieci nadal beda sie wyswietlaly w module ojca (wyjatkiem jest gdy dotyczy to gownej linii), wiec same dzieci beda narysowane w grupach po lewej lub prawej od grupy dzieci ze zwiazku aktywnego,
Zdaje sobei sprawe ze linie beda musialy sie przecinac.. no ale tego nie unikne...

Dlaczego mieszam z pojecie glownej lini ?

Poniewaz jak juz mowilam, drzewo jest tworzone w domysle dla pewnego rodu, i jego czlonkowie maja byc blisko siebie. Co wiecej obramowanie obrazka lini glownej bedzie zielone, wsyzsktich pozostralych osob ( czyli rodzina żony i nieaktualna zona) szare.

1 użytkowników online, w tym zalogowanych: 0, gości: 1