Wizualizacja aktywności na czacie (ang. chat circles) - jak rozwiązać to algorytmicznie?

0

Witam,
mam napisać program na zaliczenie (który sam sobie wymyśliłem), który będzie składał się z czatu (który umiem zrealizować) i części prezentacyjnej, która będzie pokazywać aktywność użytkowników na tym czacie. Każdy użytkownik to kolorowy okrąg, im więcej dany użytkownik się wypowiada tym okrąg bardziej rośnie, im dłużej jest nie aktywny tym bardziej maleje. I tutaj się pojawia mój problem - nowi użytkownicy to nowe, kolejne, okręgi, a bardzo aktywni użytkownicy to szybko rosnące okręgi - jak to wizualizować? Jak rozmieszczać okręgi, gdy pojawiają się nowi użytkownicy? Rozumiem, że jak się będzie robić ciasno" to będę musiał scrollować (oddalać) obraz? Te rosnące okręgi będą musiały jakoś przepychać" istniejące już okręgi, jak to sensownie zrealizować? Chodzi mi tylko o nakierowanie mnie na odpowiedni tok myślenia, nie chce kodów, nie wiem jak się za to za brać, jak ustalać pozycję okręgu itd. Wiem, że skoro sam sobie temat wymyśliłem to powinienem mieć pomysł na jego realizację, no ale jednak nie przemyślałem do końca tego. Bardzo proszę o Waszą pomoc jak się za to wziąć, jak rozstawiać nowe okręgi, jak rozwiązać widoczność rosnących okręgów i jak ew. scrollować obraz.

W internecie za dużo tego nie ma, wrzucam link do widoku, jak wygląda podobny program do takiego, jaki mam zamiar zrealizować:
http://alumni.media.mit.edu/~[...]atcircles/images/chatting.jpg

Jeżeli to ma w czymś pomóc, to mam zamiar użyć WPF w c#, ew. Silverlight.

0

Czyli można sobie powymyślać różne rzeczy, hurra:D

Kilka pomysłów, które przyszły mi do głowy (niektóre mogą być ze sobą niekompatybilne):

  1. okręgi rozmieszczać możesz np. uwzględniając dyskusje, w których brali udział użytkownicy, albo to z kim dyskutowali albo znaleźć jakąś inną zasadę, która pozwoli userów zgrupować i to grupowanie przedstawić przez rozmieszczenie kółek
  2. możesz też zrobić hierarchię, większe kółka wyskakują w górę, w ten sposób stworzy się naturalny ranking - ta metoda może nie być aż tak spektakularna, jeśli liczba dużych kółek będzie zbyt dużo w stosunku do małych
  3. i wreszcie gdy wszystko zawiedzie, zawsze możesz je spróbować poukładać przypadkowo
  4. może warto nie przydzielać użytkownikom koloru, tylko wykorzystać go do pokazania jakiejś innej zmiennej, np kolory im bliżej środka kółka tym dawniejsza aktywność
  5. może też zdecydujesz się na prezentację grupowania (1) za pomocą kolorów
  6. to program na zaliczenie, ale jednak przyjmijmy, że liczba jego użytkowników będzie na tyle duża, że nie będziesz aktualizował całej bazy w ramach podawniania danych; jeśli chcesz prezentować tylko jedną zmienną to proponuję:
    • przy każdym poście (czy przy czym tam chcesz to robić) dodawać userowi trochę punktów,
    • w pewnym momencie chcąc sprawdzić jaki jest aktualny wynik usera, porównujesz jego punkty z aktualnym kontekstem,
    • kontekst jest zmieniającą się w czasie wartością (jedną wartością dla całego serwisu), która mówi jaka wartość punktowa jest uważana za średnią, kontekst oczywiście rośnie wraz z upływem czasu, dzięki czemu dana liczba punktów jest coraz mniej "duża"
    • naturalnie ilość dodawanych punktów za post też powinna rosnąć jeżeli chcesz, żeby Twój wykres prezentował w miarę świeże dane, a nie przegląd z całego okresu działania serwisu
    • jak powinien rosnąć kontekst i nagroda za post, może wykładniczo może logarytmicznie względem czasu albo względem ilości punktów w całej bazie - poeksperymentuj sobie
    • a może więcej kontekstów określające różne progi dla owej wielkości
  7. jak przekształcić wartość zmiennej na promień okręgu, możesz liniowo, ale możesz też logarytmicznie albo wykładniczo, zależy czy chcesz bardziej uwidocznić coś, a jeśli tak to co

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