Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP, JS] Jak sprawdzić czy współrzędne należą do figury
maniak11
post 12.04.2007, 19:18:31
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.03.2006
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Witam,

Mam problem tego typu że stworzyłem funkcje rysujące różne figury za pomocą GD pobierając współrzędne z bazy są to kwadraty elipsy itp a także figury dowolne (rysowane za pomocą imagesexpixel i imagesline) I teraz mam pytanie jak po narysowaniu tego wszystkiego, po najechaniu kursorem na daną figurę i odczytaniu X i Y kursora sprawdzić czy ten punkt należy do danej figury (zawiera się w zbiorze punktów w bazie) Siedze nad tym pół dnia i nic mi nie przychodzi do głowy:/ Za jakąś pomoc będę bardzo wdzięczny
Go to the top of the page
+Quote Post
bartek00
post 12.04.2007, 19:31:08
Post #2





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 12.04.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam

Mysle, ze to moze ci pomóc:

link

Pozdrawiam

Ten post edytował strife 12.04.2007, 20:55:26


--------------------
"What you are talking to me about what"
Go to the top of the page
+Quote Post
starach
post 12.04.2007, 19:33:37
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Każdy taki punkt składa się z dwóch współrzędnych (X,Y)
dla prostokąta masz takie 4 punkty które są granicami figury.
powiedzmy masz prostokąt: LG = 20,60 PG = 100,60 PD = 100,10 LD = 20,10
LG = Lewy górny
PG = Prawy górny
PD = Prawy dolny
LD = Lewy dolny
I masz współrzędne 40,30 jak sprawdzasz czy punkt należy do prostokąta ?
Za pomocą operatorów <,>,= i tyle.
Go to the top of the page
+Quote Post
mike
post 12.04.2007, 19:37:32
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~orglee proszę nie pisz jak nie znasz rozwiązania.
Prostokąt to jeden z bardziej trywialnych przypadków, ale jak wiesz (choć chyba raczej nie wiesz) jest jeszcze nieskończona ilość figur geometrycznych a Twój algorytm ... no cóż. Nie działa.

Za mało jeszcze wiesz lub masz za słabą wyobraźnię tongue.gif
Go to the top of the page
+Quote Post
starach
post 12.04.2007, 19:43:31
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Jak zwykle się czepiasz szczegółów nie mam zamiaru nic ci udowadniać,
ale zwróć uwagę że chodziło mi o pokazanie sposobu w jaki powinno się patrzeć na to zadanie. Rozwiązanie podałem dobre a zamiast się czepiać napisz mu kod panie mądralo. laugh.gif
Go to the top of the page
+Quote Post
mike
post 12.04.2007, 19:56:23
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(orglee @ 12.04.2007, 20:43:31 ) *
Rozwiązanie podałem dobre (...)
Proszę nie pisz takich rzeczy.
Naplułem na monitor ze śmiechu sad.gif

To teraz mi pokaż jak to Twoje "dobre" rozwiązanie zadziała dla powiedzmy dowolnego sześciokąta z dziurą w środku gdzie punkt jest wewnątrz dziury?
Uwierz mi, to zadziała tylko dla prostokąta (no może jeszcze fartownie dla jakiejś innej figury).

~maniak11 rozwiązanie tego problemu za pomocą PHP (bądź JS) nie będzie takie proste.
Będzie wymagało masę obliczeń matematycznych.

Zasada jest (wydawałoby się) bardzo prosta.
Każda prosta przechodząca przez punkt wyznaczona w dowolnym kierunku może przecinać boki wielokąta w parzystej liczbie punktów. Jeśli istnieje prosta prosta mająca nieparzystą ilość punktów wspólnych z bokami wielokąta to punkt należy do obszaru wielokąta.
(to samo jest zresztą napisane w podanych wyżej linku)

Obliczenie tego jest bardzo trudne więc zastanów się czy jest Ci to potrzebne winksmiley.jpg
Go to the top of the page
+Quote Post
maniak11
post 12.04.2007, 20:03:49
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.03.2006
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Dzięki bartek00 za tego linka, tekst jest zakręcony jak słoik na zimę ale postaram się przez niego przebrnąć. Pozostaje tylko pytanie jak przekazać zmienną (np. po kliknięciu w obrazek) do php aby ten mogl dalej z tym robić co trzeba, z tego co wiem to za pomocą samego tylko JS się nie da (co innego AJAX) tyle tylko że z tym nie miałem do czynienia i nie umiałbym zrobić tego aby nie bylo okupione przeładowaniem strony. W sumie to moze sie nawet przeładowac byle by tylko pobrac te wartości. Dzięki za pomoc

Dzięki mike_mech, niestety jest mi to potrzebne bo pisze prace mgr i jest to jedna z rzeczy do zrobienia przy ktorej utknąłem dry.gif Chodzi o to że po najechaniu na daną figurę ma się wyświetlić informacja o nim pobrana z bazy a żeby to zrobić muszę mieć współrzędne bo tylko tak sprawdzę do ktorej figury dany punkt należy (żeby wyświetlić właściwy opis). Ehh czasami to mi sie mózg lasuje od kombinowania z tym...

Ten post edytował maniak11 12.04.2007, 20:04:05
Go to the top of the page
+Quote Post
mike
post 12.04.2007, 20:17:57
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(maniak11 @ 12.04.2007, 21:03:49 ) *
Dzięki mike_mech, niestety jest mi to potrzebne bo pisze prace mgr (...)
biggrin.gif Mam to za sobą.

Na dobrą sprawę tak jak mówiłem, nie jest to trudne ale wymaga masę obliczeń.

Jeśli masz do czynienia tylko z wielokątami (nie tylko wypukłymi) to nie jest tak tragicznie.
Mając wszystkie wierzchołki, wyliczasz wszystkie proste, w których zawieają się krawędzie. To będzie akurat proste, pomimo, że może czasochłonne.
Potem wyliczasz wszystkie proste przechodzące przez dany punkt. Dla sprawienia że obliczenia będą wykonalne w ograniczonym czasie możesz zawęzić ich ilość do 360 biggrin.gif

Teraz najważniejsze:
Bierzesz prostą przechodzącą przez punkt i liczysz ilość przecięć z wszystkimi krawędziami. Jeśli ilość jest parzysta to bierzesz kolejną prostą i ponawiasz obliczenia. Jeśli ilość jest nieparzysta to punkt należy do figury.

Obliczeń będzie masa, wszystko najszybciej pójdzie na macierzach, choć podejrzewam ze PHP i tak zdechnie po drodze z 10 razy.
Nie nadaje się do takich obliczeń.

Tak to wygląda w skrócie, być może w implementacji jest do prostsze bo to co napisałem to bezpośrednie przeniesienie twierdzenia na kod. Poszukaj implementacji, być może jest prostsza od tego co napisałem, nie wiem bo nigdy nie potrzebowałem.
Jeśli nie znajdziesz implementacji tego algorytmu to czeka Cię ogrom pisania. Z niepewnością, że PHP to dźwignie.
Go to the top of the page
+Quote Post
maniak11
post 12.04.2007, 20:22:10
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.03.2006
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Dzieki wielkie za informacje, poszukam czegoś w necie, może coś będzie, na tej stronce co bartek00 podal są implementacje tyle że nie w php, poszukam czegoś bo jak pomysle o pisaniu tego to...brrrr smile.gif Dzięki jeszcze raz
Go to the top of the page
+Quote Post
mike
post 12.04.2007, 20:31:01
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(maniak11 @ 12.04.2007, 21:22:10 ) *
(...) na tej stronce co bartek00 podal są implementacje tyle że nie w php (...)
Oo, nawet nie zwróciłem uwagi.
Nooo, to stary masz gotowca jedym slowem. Przepisanie tego na PHP to nic trudnego. Pikuś bym rzekł.

Większa trudność niż to obisanie tego jakimś układem współrzędnych, rysowanie figur na nim na podstawie dancyh z bazy a potem pobieranie współrzędnych punktu do obliczeń.

Na kiedy masz to mieć snitch.gif

Bo wiesz (Uwaga: Teraz nastąpi autoreklama) jest magistrem matematyki biggrin.gif
Mógłbym Ci to machnąć ale dopiero za jakiś miesiąć. Do tego czasu sam to napiszesz ze dwa razy winksmiley.jpg
Go to the top of the page
+Quote Post
maniak11
post 12.04.2007, 20:51:36
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.03.2006
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Hehe, dzięki, prace mam oddać standardowo do końca czerwca więc czasu trochę jest ale miesiąc to rzeczywiście kupa czasu więc mam nadzieje ze za ten czas będę duużo do przodu:) Dzięki Ci jeszcze raz, cieszy mnie że są jeszcze tacy ludzie jak Ty, pozdrawiam, hey
Go to the top of the page
+Quote Post
DeyV
post 13.04.2007, 10:17:49
Post #12





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




A może podejść do tego od innej strony?
Zamiast tworzyć matematyczny wzór wszystkich tych figur, i matematyczną analizę ich struktury, może łatwiej byłoby po prostu odczytać kolor pixla na utworzonym wcześniej obrazku?
W ten sposób analizę matematyczną i tworzenie figur zostawiamy bibliotece GD, która i tak to musi zrobić podczas ich rysowania, a nam pozostaje jedynie zatroszczyć się o to, by każda z figur miała inny kolor.

Cytat
imagecolorat" title="Zobacz w manualu PHP" target="_manual — Get the index of the color of a pixel
Opis
int imagecolorat ( resource $image, int $x, int $y )


Ad 2. - pobranie współrzędnej gdzie obrazek został kliknięty jest bardzo proste. Wystarczy zrobić
<input type="image" src="adres obrazka" />
Ma on nie tylko funkcjonalność submit, ale wysyła również współrzędne x i y kliknięcia.


ps. Choć tak naprawdę - rozwiązałbym ten problem chyba raczej w Flash, gdzie utworzyłbym mechanizm do rysowania figur geometrycznych, tworząc z nich od razu buttony. Pozwoliłoby to urozmaicić prezentację o elementy animacji winksmiley.jpg


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
maniak11
post 14.04.2007, 12:25:15
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.03.2006
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


DeyV: Też myślałem o tym żeby pobrać kolor obrazka tym bardziej że kolor zapisany jest w bazie mysql i takie figury są rysowane jaki kolor jest w bazie, niestety jednak nie mogę zrobić tak żeby każda figura miala inny kolor bo ma to być fragment mapy więc ulice będą mialy ten sam kolor, budynki ten sam itd.

Ciekawy sposób na pobranie współrzędnych x,y swoją drogą. dzięki za pomoc.

Jeśli chodzi o flasha to z początku chciałem to tak zrobić ale usłyszałem od genialnej Pani opiekun że nie jest to narzędzie do tego typu zadań. No cóż...wystarczy wejsc na mapa.pf.pl aby się o tym przekonać. Teraz to już za dużo zrobiłem żeby wszystko na AS-a przenosić. Dzieki jeszcze raz
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 09:44