Strona 1 z 2
V powierzchni - algorytm
: 7 sty 2006, o 14:35
autor: marsoft
W jaki sposób w daną powierzchnie wpisać możliwy największy okrąg?
Wytłumaczę do czego miej więcej on jest potrzebny:
Więc gdy mamy tam jakąś powierzchnie to szukamy na niej punktu w którym będziemy mogli wpisać największy możliwy okrąg. Mając okrąg a konkretnie promień wyliczamy objętość kuli V = (4/3 pi r^3)3. Następnie ten obszar w którym jest ta kula przedstawiona jako okrąg zamalujemy. Zostaje nam wtedy obszar zmniejszony o pole powierzchni okręgu. Powtarzamy ten krok tz. szukamy znowu miejsca w którym można wpisać największy okrąg - znowu objętość i tak dalej. Pętla ma się kończym wtedy gdy okrąg czyli kula w tym przykadku będzie wynosiła 1 pixel. Myślę, że wytłumaczyłem w miare zrozumiale.
macie jakiś pomysł który to zrobi szybko bo zależy tu najbardziej na czasie wyszukiwania
dzięki wielkie za wszelkie opinie i pomoce
V powierzchni - algorytm
: 7 sty 2006, o 17:09
autor: W_Zygmunt
marsoft pisze:Ten okrąg jest kulą
Zupełnie nie rozumiem. Okrąg jest tworem dwuwymiarowym, natomiast kula to bryła trójwymiarowa. ??????
V powierzchni - algorytm
: 7 sty 2006, o 18:23
autor: Fibik
Szukamy kolejno największych okręgów a później, mając już promienie, liczymy objętości kul - sumujemy.
Problem polega na znalezieniu największego koła, które można wpisać w dowolny wielokąt, nawet wklęsły.
Ekstremum funkcji:
\(\displaystyle{ f(r) = r}\)
oraz ograniczenie:
\(\displaystyle{ (x-a)^2 + (y-b)^2 < r^2}\)
Każdy (x, y) należy do figury o kolejnych wierzchołkach:
\(\displaystyle{ W_k(x_k, y_k),\ k=,\ W_1 = W_n}\)
Trzeba to teraz tak przekształcić, aby można było obliczyć pochodne i...
V powierzchni - algorytm
: 7 sty 2006, o 19:31
autor: marsoft
pomysł miałem taki:
1. Mając tą jakąś powierzchnie mamy zbiór punktów A_n(x,y) przy n-ilość pixeli (punktów) powierzchni.
2. Każdy punkt będzie reprezentował okrąg o promieniu r=1pixel
Zrobić pętke która:
a)będzie dodawała do tych A_n punktów dugość promienia zwiększoną o jeden pixel. Oczywiśćie ten A_n wtedy to okrąg.
b)Sprawdzamy czy okrąg reprezentowany prze dany A_n natrafił na krawędź powierzchni (obrys)reprezentowany przez (x,y). Jeśli tak to zapisujemy do tablicy A_n promień.
c) Pętla będzie się powtarzała dopóki wszystkie okręgi A_n natrafią na krawędź. Ostatni A_n będzie reprezentował największy okrąg.
d) Następnie zamalujemy go.
e)Później trzeba wykorzystań r zapisane w tablicach - Zaczynamy od największego i badamy czy nadal on jest największy. Jeśli nie to A_n reprezentowany przez mniejsze r i tak dalej...
------------------------------------------------------
hmm
V powierzchni - algorytm
: 8 sty 2006, o 02:08
autor: Fibik
Coś takiego prawie będzie działać, ale:
Zwiększanie od 1 do r dla w x h punktów i teraz bieganie po tych okręgach...
policzmy ile to operacji:
w = h = N - rozmiar bitmapy
idziemy z R od 1 do N/2 razy 2piR razy, i dla N*N punktów:
przybliżona liczba operacji: \(\displaystyle{ n = 2\pi(N/2)^3/3 N^2 = \frac{\pi}{12}N^5}\)
jeśli zmniejszmy to 20 razy (przy brzegach R < N/2) to wyjdzie około n = N^5/100,
dla N = 1000, n = 10^13 = 10000 mld,
gdyby: 1 rozkaz = 1 instrukcja, byłoby to 100000s > 1 doba, dla procesora 1GHz
Jest lepszy sposób, ale musiałbym pisać to z 3 godziny, a później jeszcze z 9 razy wyjaśniać... i tak do wakacji...
V powierzchni - algorytm
: 8 sty 2006, o 11:21
autor: marsoft
[ Dodano: Wto Sty 10, 2006 1:07 pm ]
no wiec nici z sugestii lub jakiegoś złotego środka???????
V powierzchni - algorytm
: 10 sty 2006, o 20:03
autor: Fibik
Pisałem na PW - może nie działa?
V powierzchni - algorytm
: 11 sty 2006, o 20:33
autor: marsoft
nie nie otzymałem
V powierzchni - algorytm
: 12 sty 2006, o 11:56
autor: Fibik
Niemożliwe.
Gdzie jest kierownik tego lokalu?
V powierzchni - algorytm
: 12 sty 2006, o 12:36
autor: Tomasz Rużycki
Jakiś błąd... Wyślij raz jeszcze, zapisało się w 'wysłanych', bądź zalega w 'do wysłania'.
Pozdrawiam,
--
Tomasz Rużycki
V powierzchni - algorytm
: 12 sty 2006, o 15:52
autor: marsoft
Tomasz Rużycki pisze:Jakiś błąd... Wyślij raz jeszcze, zapisało się w 'wysłanych', bądź zalega w 'do wysłania'.
Tomasz Rużycki
dalej nic nie mam :/
Jeśli możesz to wyślij na maila
dbdariusz@wp.pl - wielkie dzięki
forum ma jakieś dziwne błędy - ADMIN DLACZEGO??????!
V powierzchni - algorytm
: 13 sty 2006, o 04:38
autor: Fibik
Wersja uproszczona.
Po zaznaczeniu obszaru otrzymasz punkty konturu, czyli taki wielokąt o wierzchołkach:
\(\displaystyle{ P_1, P_2, P_3, ...}\)
1. Dla każdego punktu wewnątrz obszaru (x,y) liczysz minimalną odległość do tego konturu
(należy liczyć dla kolejnych odcinków i wybrać najbliższy).
Te minimalne odległośći zapisujemy do tablicy: t[x][y] = r (lepiej r^2 - pierwiastek później)
2. Szukamy w t maksimum (można to zrobić już w trakcie wcześniejszych obliczeń - wtedy zaoszczędzimy sporo czasu) - to jest nasze największe koło - r < 2 to koniec, r >= 2 rysujemy i idziemy dalej
3. Korygujemy odległości w tablicy t, uwzględniając to poprzednie koło - liczymy odległość d od (x,y) do okręgu - prosta sprawa. Jeśli t[x,y] > d, to zmieniamy: t[x,y] = d, idziemy do 2.
var t : array[0..MAX_W-1, 0..MAX_H-1] of single; { albo integer }
MAX_H = MAX_W = 2048 - przykładowo, wtedy t ma rozmiar 16MB - nie deklaruj tego jako zmienną lokalną,
jako globalną też nie.
Zamiast sprawdzać kolor pixela bezpośrednio w obrazku - robimy tablicę:
pixele : array[0..MAX_W-1, 0..MAX_H-1] of byte;
pixele[x,y] := 1; zaznaczony obszar
pixele[x,y] := 0; poza obszarem
Teraz można ze 100 razy szybciej sprawdzić, czy punkt leży w zaznaczonym obszarze:
if pixele[x,y] 0 then jest...
V powierzchni - algorytm
: 16 sty 2006, o 02:26
autor: marsoft
Chwile mnie nie było, ale widze, że pomoc jest
1. Może zacznijmy od pkt pierwszego tz kontur. Ja wycinek zalalowuje w ten sposób, że najpierw rysuje:
image1.Picture.Bitmap.Canvas.Pixels[X,Y]:=clREd;
a następnie zamalowuje
image1.Picture.Bitmap.Canvas.FloodFill(X,Y,clred,fsborder);
Mam problem jak z tego wyciąnąć kontury, bo kontury nie zawsze są tym - >Canvas.Pixels[X,Y]:=clREd; Jak to wyciąnąć już z zamalowanego lub może masz jakiś (zapewne tak) inny lepszy sposób.
2. Co do drugiego to czy dałoby radę wytłumaczyć bardziej ten 3 pkt bo jednak dla mnie troche to nie jasne - szczególne to że if t[x,y]>d to t[x,y]=d czy nie if t[x,y] ten pkt chyba właśńie ma to wykonywać, ale nie rozumiem w ogóle.
dzieki wielkie - pokłony oczywiście z góry[/quote]
V powierzchni - algorytm
: 16 sty 2006, o 12:34
autor: Fibik
Kontur musisz mieć - ślad prowadzenia myszki.
Pewnie później tym FloodFill go wypełniasz.
2. Liczysz minimum, zatem źle kombinujesz.
Punkty na okręku.
W okręgu jest koło, a ono nas nie interesuje - zostało już wymazane.
V powierzchni - algorytm
: 16 sty 2006, o 17:56
autor: marsoft
Fibik pisze:Kontur musisz mieć - ślad prowadzenia myszki.
Pewnie później tym FloodFill go wypełniasz.
2. Liczysz minimum, zatem źle kombinujesz.
Punkty na okręku.
W okręgu jest koło, a ono nas nie interesuje - zostało już wymazane.
ok kontury mam. Licze minimum hmm dla każdego pixela mam rozumieć.
Jest koło, ale są pkt które znajdują się w kole a ich nie mammy brać pod uwage, ale one są w tablicy t[x,y] dla wszystkich pixeli w skład których wchodzą też współżędne znajdujące się wkole. Pytam zatem jak ma ta funkcja wyglądać aby ominąć te pkt t[x,y] i jak dalej wyliczyć następne największe koło które ma się zawierać w wycinku już wypełnionym kołem. Wchodzą wtedy tak jakby dodatkowe kontury nom nie? (koła) hmmm.....mógłbyś pojaśnić - thx dziękuje