Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Porównywanie współrzędnych dwóch elementów
kondix03
post 18.09.2011, 19:46:29
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 30.08.2010

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


Witam, szukałem w Google ale nie znalazłem żadnych skryptów/funkcji które pomogłyby mi porównać czy jeden element "leży" na drugim. Elementy są przenoszone za pomocą jQuery UI jednak mi chodzi o funkcję sprawdzającą czy dane współrzędne nachodzą na siebie. Napisałem dwie funkcje ale nie wiem czy działa poprawnie.
Kod:
  1. function checkPosition($posx1, $posy1, $posx2, $posy2){
  2. if($posx1 != $posx2 && $posy1 != $posy2){
  3. return true;
  4. }
  5. else{
  6. return false;
  7. }
  8. }
  9. function checkFieldUnder($id, $to_top, $to_left, $width, $length){
  10. $topos = array(
  11. 'y' => $to_top,
  12. 'x' => $to_left
  13. );
  14. $items_query = mysql_query("SELECT * FROM items");
  15. $false = true;
  16. while($itemspos = mysql_fetch_row($items_query)){
  17. $checkpos = array(
  18. 'y' => $itemspos[13],
  19. 'x' => $itemspos[14]
  20. );
  21. if($itemspos[0] != $id){
  22. $toposx = $topos['x'];
  23. $toposy = $topos['y'];
  24. $checkposx = $checkpos['x'];
  25. $checkposy = $checkpos['y'];
  26. $tpxw = $toposx + $width;
  27. $tpyl = $toposy + $length;
  28. while($toposx != $tpxw && $toposy != $tpyl){
  29. if(!checkPosition($toposx, $toposy, $checkposx, $checkposy)){
  30. break;
  31. $false = false;
  32. }
  33. else{
  34. if($toposx != $tpxw){
  35. $toposx++;
  36. }
  37. if($toposy != $tpyl){
  38. $toposy++;
  39. }
  40. }
  41. }
  42. if($false == false){
  43. return false;
  44. }
  45. else{
  46. return true;
  47. }
  48. }
  49. }
  50. }


Prosiłbym o pomoc i/lub podpowiedzi smile.gif
Go to the top of the page
+Quote Post
Crozin
post 18.09.2011, 20:18:39
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Generalnie muszę Ci pogratulować. Chyba jeszcze nigdy przestudiowanie kodu który robi taką pierdołę jaką jest wykrycie nachodzenia na siebie dwóch prostokątów nie zajęło tyle czasu.
Zacznij formatować jakoś ten kod, nadawać sensowne nazwy zmiennym i grupować powiązane ze sobą dane w jakieś logiczne struktury.

Muszę też pogratulować Ci pomysłu, bo z tego co widzę to zamiast sprawdzić to na postawie współrzędnych i wymiarów porównujesz każdy punkt należący do prostokąta.

  1. class Rectangle {
  2. private $x;
  3. private $y;
  4. private $width;
  5. private $height;
  6.  
  7. public function __construct($x, $y, $width, $height) {
  8. // sprawdzasz czy wszystkie parametry to liczby całkowite większe od zera
  9. // i wyrzucasz wyjątek jeżeli nie są
  10.  
  11. $this->x = $x;
  12. $this->y = $y;
  13. $this->width = $width;
  14. $this->height = $height;
  15. }
  16.  
  17. public function intersects(Rectangle $r) {
  18. $tw = $this->width;
  19. $th = $this->height;
  20. $tx = $this->x;
  21. $ty = $this->y;
  22.  
  23. $rw = $r->width;
  24. $rh = $r->height;
  25. $rx = $r->x;
  26. $ry = $r->y;
  27.  
  28. $rw += $rx;
  29. $rh += $ry;
  30. $tw += $tx;
  31. $th += $ty;
  32.  
  33. return (($rw < $rx || $rw > $tx) &&
  34. ($rh < $ry || $rh > $ty) &&
  35. ($tw < $tx || $tw > $rx) &&
  36. ($th < $ty || $th > $ry));
  37. }
  38. }
  39.  
  40. $r1 = new Rectangle(5, 7, 23, 4);
  41. $r2 = new Rectangle(1, 12, 4, 1);
  42.  
  43. var_dump($r1->intersects($r2));
W sumie punkt i wymiary również mogłyby być obiektami:
  1. class Point {
  2. private $x;
  3. private $y;
  4.  
  5. // ...
  6. }
  7.  
  8. class Dimension {
  9. private $width;
  10. private $height;
  11.  
  12. // ...
  13. }


Ten post edytował Crozin 18.09.2011, 20:50:32
Go to the top of the page
+Quote Post
kondix03
post 18.09.2011, 20:44:36
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 30.08.2010

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


Za dużo to ja nie zrozumiałem bo nie uczyłem się jeszcze operować na klasach itd. ale dzięki za naprowadzenie.

Dobra, już łapię o co chodzi. Wielkie dzięki, ja nad tym siedziałem ze 4 dni, napisałem ze 4 funkcje i nic sad.gif Jeszcze raz wielkie dzięki.

Ten post edytował kondix03 18.09.2011, 21:19:08
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: 14.08.2025 - 07:30