[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Dlugosc krzywej, pole zaznaczonej powierzchni

ledres

9/13/2007 8:37:00 AM

Witam.
Mam do napisania program w C#, ktory:

1. Pozwoli uzytkownikowi narysowac krzywa, a pozniej poda jej dlugosc.

2. Pozwoli uzytkownikowi zaznaczyc jakis obszar i poda jego powierzchnie.

Pytania mam nastepujace:

1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne raczej
sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym z gory
wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne tworzace
ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy kolejnymi
punktami.

2. Jak mogloby wygladac od strony interfejsu zaznaczanie nieregularnego
obszaru? Jesli pozwolic po prostu na rysowanie krzywej, to ten obszar
moglby nie byc zamkniety albo ta krzywa moglaby sie wielokrotnie przecinac.

3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
policzyc jego powierzchnie?

Z gory dzieki za odpowiedzi.

pzdr. ledres
10 Answers

ledres

9/13/2007 10:09:00 AM

0

ledres pisze:

Przemyslalem sprawe i wpadlem na pomysl jak te problem rozwiazac,
niestety rodzi on dodatkowe pytania:

> 1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne raczej
> sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym z gory
> wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne tworzace
> ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy kolejnymi
> punktami.

Zdaje sie, ze tak wlasnie jest.

> 2. Jak mogloby wygladac od strony interfejsu zaznaczanie nieregularnego
> obszaru? Jesli pozwolic po prostu na rysowanie krzywej, to ten obszar
> moglby nie byc zamkniety albo ta krzywa moglaby sie wielokrotnie przecinac.

MS Paint rozwiazuje to w ten sposob, ze zamyka krzywa laczac jej
pierwszy i ostatni punkt - to chyba jest najprostszy i skuteczny sposob.

> 3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
> policzyc jego powierzchnie?

Wpadlem na pomysl, zeby liczyc piksele ktore znajduja sie wewnatrz tego
obszaru, tak chyba bedzie najprosciej. Pytanie tylko, jak odroznic te,
ktore sa wewnatrz od tych, ktore sa na zewnatrz - moj pomysl jest taki,
zeby brac jakis punkt ktory na pewno jest na zewnatrz i sprawdzac ile
razy odcinek laczacy te dwa punkty przecina krzywa - jesli ta ilosc jest
parzysta, to punkt jest poza obszarem, w przeciwnym razie jest w srodku.

Co o tym myslicie?

pzdr. ledres

Beginner

9/13/2007 6:14:00 PM

0


U¿ytkownik "ledres" <lost2malp@opkropka.pl> napisa³ w wiadomo¶ci
news:fcasqu$1nus$1@opal.icpnet.pl...
> Witam.
> Mam do napisania program w C#, ktory:
>
> 1. Pozwoli uzytkownikowi narysowac krzywa, a pozniej poda jej dlugosc.

Musi byc zdefiniowana jakas jednostka miary.Zeby liczyc dlugosc musisz miec
miare :)
Jakis uklad wspolrzednych czy cus tez by sie przydal.

> 2. Pozwoli uzytkownikowi zaznaczyc jakis obszar i poda jego powierzchnie.

Calki?



ledres

9/13/2007 8:10:00 PM

0

Depesz pisze:

>> Mam do napisania program w C#, ktory:
>>
>> 1. Pozwoli uzytkownikowi narysowac krzywa, a pozniej poda jej dlugosc.
>
> Musi byc zdefiniowana jakas jednostka miary.Zeby liczyc dlugosc musisz miec
> miare :)

Jednostka bedzie 1 piksel.

> Jakis uklad wspolrzednych czy cus tez by sie przydal.

Uklad wspolrzednych jest konieczny do rysowania i dostarczaja go
wszystkie komponenty, na ktorych mozna rysowac.

>> 2. Pozwoli uzytkownikowi zaznaczyc jakis obszar i poda jego powierzchnie.
>
> Calki?

Ale z czego, skoro zaznaczenie nie jest opisane zadnym wzorem?

A co myslisz o pomyslach, ktore przedstawilem w swojej wlasnej
odpowiedzi na moj post?

pzdr. ledres

yinyang

9/13/2007 8:20:00 PM

0

Praca domowa? Odswiez na poczatek troche slownictwa z geometrii bo
profesor moze cie oblac.

>> 1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne raczej
>> sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym z gory
>> wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne
>> tworzace ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy
>> kolejnymi punktami.
>
> Zdaje sie, ze tak wlasnie jest.
Ta twoja krzywa to nie krzywa tylko lamana. W przypadku lamanych na
plaszczyznie raczej nie szukalbym innego sensownego sposobu. :-)

>> 3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
>> policzyc jego powierzchnie?
http://www.google.pl/search?q=area+... i (...)

> Wpadlem na pomysl, zeby liczyc piksele ktore znajduja sie wewnatrz tego
> obszaru, tak chyba bedzie najprosciej. Pytanie tylko, jak odroznic te,
> ktore sa wewnatrz od tych, ktore sa na zewnatrz - moj pomysl jest taki,
> zeby brac jakis punkt ktory na pewno jest na zewnatrz i sprawdzac ile
> razy odcinek laczacy te dwa punkty przecina krzywa - jesli ta ilosc jest
> parzysta, to punkt jest poza obszarem, w przeciwnym razie jest w srodku.
(...) i trzymaj sie tego co tam znajdziesz. To *nie* jest wg mnie
najprostsze rozwiazanie. Moze prowadzic do jezeli nie blednych to
zaokraglonych wyników. Poza tym musisz znalezc metode na test przeciecia
dwóch odcinków. Poza tym nawet jezeli napiszesz ta funkcje to jej
wykonanie bedzie dosyc zmudne. Musisz takich testów przeciecia zrobic
P*N (P - ilosc pixeli które chcesz sprawdzac, N - liczba wierzcholków).
Czyli musisz sprawdzac dodatkowe pixele oprócz tych zawartych w wieloboku.



ledres

9/13/2007 8:38:00 PM

0

aberazioon pisze:
> Praca domowa? Od?wie? na pocz?tek troche s3ownictwa z geometrii bo
> profesor mo?e cie oblaa.

Praca magisterska ;) (ale to tylko jej mala czesc). Co do slownictwa z
geometrii to chyba sie mylisz ;)

>>> 1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne
>>> raczej sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym
>>> z gory wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne
>>> tworzace ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy
>>> kolejnymi punktami.
>>
>> Zdaje sie, ze tak wlasnie jest.
> Ta twoja krzywa to nie krzywa tylko 3amana. W przypadku 3amanych na
> p3aszczy?nie raczej nie szuka3bym innego sensownego sposobu. :-)

Lamana to rodzaj krzywej. Na dyskretnych pikselach nie da sie zobrazowac
krzywej nie bedacej lamana.

>>> 3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
>>> policzyc jego powierzchnie?
> http://www.google.pl/search?q=area+... i (...)
>
>> Wpadlem na pomysl, zeby liczyc piksele ktore znajduja sie wewnatrz
>> tego obszaru, tak chyba bedzie najprosciej. Pytanie tylko, jak
>> odroznic te, ktore sa wewnatrz od tych, ktore sa na zewnatrz - moj
>> pomysl jest taki, zeby brac jakis punkt ktory na pewno jest na
>> zewnatrz i sprawdzac ile razy odcinek laczacy te dwa punkty przecina
>> krzywa - jesli ta ilosc jest parzysta, to punkt jest poza obszarem, w
>> przeciwnym razie jest w srodku.
> (...) i trzymaj sie tego co tam znajdziesz. To *nie* jest wg mnie
> najprostsze rozwi?zanie. Mo?e prowadzia do je?eli nie b3ednych to
> zaokr?glonych wyników.

Dlaczego? Poza tym nie bardzo widze w tych wynikach wyszukiwania cos co
mogloby mi pozwolic na inne rozwiazanie.

> Poza tym musisz znale?a metode na test przeciecia
> dwóch odcinków.

Plotno po ktorym rysuje juz dostarcza takiej funkcji.

> Poza tym nawet je?eli napiszesz t? funkcje to jej
> wykonanie bedzie dosya ?mudne. Musisz takich testów przeciecia zrobia
> P*N (P - ilo?a pixeli które chcesz sprawdzaa, N - liczba wierzcho3ków).

A co maja z tym wspolnego wierzcholki?

pzdr. ledres

yinyang

9/13/2007 9:29:00 PM

0


> Praca magisterska ;) (ale to tylko jej mala czesc). Co do slownictwa z
> geometrii to chyba sie mylisz ;)
> Lamana to rodzaj krzywej.
Ok, jest pewnie tak jak mówisz, ale w sklepie tez pytasz "zepsul mi sie
samochód, poprosze alternator"? Nazywaj rzeczy precyzyjnie, tym bardziej
jezeli piszesz na usenet. Rodzina krzywych jest bardzo, bardzo duza.
http://mathworld.wolfram.com/search/?q...


> Na dyskretnych pikselach nie da sie zobrazowac krzywej nie
> bedacej lamana.
(...)tak jak i krzywej bedacej lamana o odcinkach innych niz zgodne
kierunkiem z siatka pixeli, jezeli juz patrzymy na ta kwestie twoim
sposobem. Rzeczywisty zarys krzywej smuklej nie przecina analitycznie
calkowitych wspólrzednych pixeli.


> Dlaczego? Poza tym nie bardzo widze w tych wynikach wyszukiwania cos co
> mogloby mi pozwolic na inne rozwiazanie.
No to masz problem. Pomoge ci.
http://mathworld.wolfram.com/Polygo... [10. wynik]


>> Poza tym musisz znalezc metode na test przeciecia dwóch odcinków.
> Plotno po ktorym rysuje juz dostarcza takiej funkcji.
Hmm... Przybliz szczególy tej funkcji.


>> Poza tym nawet jezeli napiszesz ta funkcje to jej wykonanie bedzie
>> dosyc zmudne. Musisz takich testów przeciecia zrobic P*N (P - ilosc
>> pixeli które chcesz sprawdzac, N - liczba wierzcholków).
>
> A co maja z tym wspolnego wierzcholki?
8-/ Wierzcholki twojej krzywej lamanej zamknietej? No, pewnie duzo :-)


Oprócz tego, jak masz zamiar znalezc w twojej metodzie punkt poczatkowy
o którym zawsze wiadomo ze nie nalezy do wnetrza wieloboku? Oczywiscie
oprócz zalozenia sobie jakiegos punktu w rogu plótna który rzadko kiedy
bedzie nalezal do wnetrza, bo nikt tam nie bedzie klikal...

Wogóle zagladaj na mathworld.wolfram.com, w 95% przypadków nie bedziesz
musial klepac postów.

ledres

9/13/2007 9:46:00 PM

0

aberazioon pisze:
>
>> Praca magisterska ;) (ale to tylko jej mala czesc). Co do slownictwa z
>> geometrii to chyba sie mylisz ;)
>> Lamana to rodzaj krzywej.
> Ok, jest pewnie tak jak mówisz, ale w sklepie te? pytasz "zepsu3 mi sie
> samochód, poprosze alternator"? Nazywaj rzeczy precyzyjnie, tym bardziej
> je?eli piszesz na usenet. Rodzina krzywych jest bardzo, bardzo du?a.
> http://mathworld.wolfram.com/search/?q...

Alternator to czesc samochodu, a nie rodzaj. Jak mi sie zepsuje Peugeot
to moglbym powiedziec "zepsul mi sie samochod" :) Poza tym uzytkownik
rysuje krzywa, to, ze jest w komputerze reprezentowana jako lamana to
inna sprawa.
Ale to sa rozwazania nomenklaturalne, w dodatku nie zmierzajace do
rozwiazania problemu.

> > Na dyskretnych pikselach nie da sie zobrazowac krzywej nie
> > bedacej lamana.
> (...)tak jak i krzywej bed?cej 3aman? o odcinkach innych ni? zgodne
> kierunkiem z siatk? pixeli, je?eli ju? patrzymy na t? kwestie twoim
> sposobem. Rzeczywisty zarys krzywej smuk3ej nie przecina analitycznie
> ca3kowitych wspó3rzednych pixeli.

Dokladnie o tym pisze, ale jak wyzej - to nie jest istotne.

>> Dlaczego? Poza tym nie bardzo widze w tych wynikach wyszukiwania cos
>> co mogloby mi pozwolic na inne rozwiazanie.
> No to masz problem. Pomoge ci.
> http://mathworld.wolfram.com/Polygo... [10. wynik]

Widzialem to, ale to dotyczy wieloboku wypuklego i o nieprzecinajacych
sie bokach - uzytkownicy to niestety zlosliwe bestie :)

>>> Poza tym musisz znale?a metode na test przeciecia dwóch odcinków.
>> Plotno po ktorym rysuje juz dostarcza takiej funkcji.
> Hmm... Przybli? szczegó3y tej funkcji.

Microsoft.Ink.Stroke.FindIntersections. Wiecej nie wiem, bo to nie jest
open source :)

>>> Poza tym nawet je?eli napiszesz t? funkcje to jej wykonanie bedzie
>>> dosya ?mudne. Musisz takich testów przeciecia zrobia P*N (P - ilo?a
>>> pixeli które chcesz sprawdzaa, N - liczba wierzcho3ków).
>>
>> A co maja z tym wspolnego wierzcholki?
> 8-/ Wierzcho3ki twojej krzywej 3amanej zamknietej? No, pewnie du?o :-)

Ok, nadal nie rozumiem. Nie twierdze, ze nic nie maja, tylko prosze o
wytlumaczenie.

> Oprócz tego, jak masz zamiar znale?a w twojej metodzie punkt pocz?tkowy
> o którym zawsze wiadomo ?e nie nale?y do wnetrza wieloboku? Oczywi?cie
> oprócz za3o?enia sobie jakiego? punktu w rogu p3ótna który rzadko kiedy
> bedzie nale?a3 do wnetrza, bo nikt tam nie bedzie klika3...

Tego jeszcze nie wiem.

pzdr. ledres

Mateusz Loskot

9/14/2007 2:42:00 AM

0

ledres wrote:
> Witam.
> Mam do napisania program w C#, ktory:
>
> 1. Pozwoli uzytkownikowi narysowac krzywa, a pozniej poda jej dlugosc.
> 2. Pozwoli uzytkownikowi zaznaczyc jakis obszar i poda jego powierzchnie.
>
> Pytania mam nastepujace:
>
> 1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne raczej
> sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym z gory
> wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne tworzace
> ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy kolejnymi
> punktami.

Co do za krzywa?

W najprostrzym przypadku masz 3aman?, inaczej "line string", czyli ci?g
segmentów (prostych), i wzór masz w Subject 1.02 z FAQ [1]

W przypadku innych krzywych, szukaj na przyk3ad:

http://www.google.pl/search?q=%2Bbezier+%2Bcurve...

[1] http://www.faqs.org/faqs/graphics/algor...
oraz pote?ne archiwum
http://groups.google.com/group/comp.graphics.a...

Sporo przyk3adów masz na gamedev.net.

> 2. Jak mogloby wygladac od strony interfejsu zaznaczanie nieregularnego
> obszaru? Jesli pozwolic po prostu na rysowanie krzywej, to ten obszar
> moglby nie byc zamkniety albo ta krzywa moglaby sie wielokrotnie przecinac.

"Wizualnie" zamkniety nie, ale faktyczne "?ciany" zawsze istniej?,
jest to albo o? uk3adu wspó3rzednych, ramka okna, etc.

> 3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
> policzyc jego powierzchnie?

W przypadku rysowania 3amanej, która zamyka dany obszar (ring),
patrz Subject 2.01 z FAQ [1] w przypadku innych krzywych,
szukaj po tropie "area under curve".

Ogólnie to problemy te s? do?a podstawowe i rozwi?zania "le?? na
ulicach" Google.

Pozdrawiam
--
Mateusz Loskot
http://mateusz....

Doker

9/14/2007 1:41:00 PM

0

Ka?d? figure zamkniet? mo?esz przybli?ya zbiorem odcinków.
Wystarczy ze wzgledem jednego z wierzcho3ków podzielisz j? na zbiór
trójk?tów. Ich pola mo?esz ju? policzya. To zadanie z gimnazjum.

Lopez

9/15/2007 8:14:00 AM

0

ledres napisa3(a):
> Witam.
> Mam do napisania program w C#, ktory:
>
> 1. Pozwoli uzytkownikowi narysowac krzywa, a pozniej poda jej dlugosc.
>
> 2. Pozwoli uzytkownikowi zaznaczyc jakis obszar i poda jego powierzchnie.
>
> Pytania mam nastepujace:
>
> 1. Jak policzyc dlugosc narysowanej krzywej? Wzory matematyczne raczej
> sie nie przydadza, bo ta krzywa nie jest opisana zadnym znanym z gory
> wzorem. Czy krzywa jest reprezentowana w pamieci przez kolejne tworzace
> ja punkty? Jesli tak, to mozna by sumowac odleglosci miedzy kolejnymi
> punktami.
>
> 2. Jak mogloby wygladac od strony interfejsu zaznaczanie nieregularnego
> obszaru? Jesli pozwolic po prostu na rysowanie krzywej, to ten obszar
> moglby nie byc zamkniety albo ta krzywa moglaby sie wielokrotnie przecinac.
>
> 3. Jesli juz udaloby sie jakos zaznaczyc ten obszar, to jak pozniej
> policzyc jego powierzchnie?
>

http://www.alg...

w czesci algorytmy sa dwa dzialy:
podstawy grafiki i geometria obliczeniowa.
Na ich podstawie bedziesz mial ogólny pogl?d jak to sie robi

--
Pozdrawiam
Lopez