Wpis z mikrobloga

#programowanie Załóżmy, że mam za zadanie napisać aplikację, w której badam, czy dwa dynamicznie poruszające się elementy na siebie nie nachodzą (mamy ich położenia w układzie xy). W przypadku kół sprawa jest prosta - wystarczy badać, czy suma promieni nie jest większa niż odległość od ich środków, czyli r1+r2> sqrt((x1-x2)^2 - (y1-y2)^2). Czy jest jakiś elegancki sposób na badanie, czy dwa prostokąty się na siebie nie nakładają?
htfhere - #programowanie Załóżmy, że mam za zadanie napisać aplikację, w której badam...

źródło: comment_hahMwF27Ppzrz6uWj8QW36w0LPxBDijW.jpg

Pobierz
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@htfhere: nawet gdy wszystko się obraca, zadanie jest trywialne, wystarczy z któregokolwiek prostokąta wziąć współrzędne 4 rogów i sprawdzić, czy któryś z nich nie zawiera się, nie leży w drugim prostokącie i wykonać to dla drugiego prostokąta
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@matthosu:

z ciekawości jak za pomocą równań prostych byś to rozwiązał? Sprawdzajac czy się przecinają? A co z przypadkiem gdy jeden prostokąt jest całkowicie zawarty w drugim?
  • Odpowiedz
@Antidotum119: Mając cztery proste opisujące czworokąt wiesz jaki obszar zawiera się między nimi.
A dokładniej - dwa zestawy po cztery proste.

Sprawdzając czy należy do przestrzeni po odpowiedniej stronie prostych (a dokładniej, więcej niż dwóch przestrzeni) efektywnie sprawdzasz czy jest w pożądanym obszarze.
Pierwsze na myśl przyszło mi sprawdzanie po wierzchołkach, ale to raczej kiepski pomysł, bo dwa prostokąty mogą się przecinać bez posiadania któregokolwiek z wierzchołków we wspólnej przestrzeni
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@matthosu: jak wspomniałem wyżej - nie znam się na programowaniu, w życiu pisałem jedynie proste programy opierające się głównie na funkcji "if". Ale jeśli można sprawdzić czy jedna powierzchnia zawiera się w danym obrębie to problem rozwiązany. Ale nie bardzo wiem jak program miałby to sprawdzać. Podstawiając "wszystkie" punkty jednej powierzchni i sprawdzając czy zawierają się między czterema prostymi?

Poza tym nie rozumiem jak sprawdzenie przecinania się prostych ma tu
  • Odpowiedz
@Antidotum119: Wszystkie punkty zajęły by zbyt długo.
Po prostu robisz to samo co w liceum przy porównywaniu równań prostych, tylko zapisujesz to jako program. Najprościej byłoby przez zdefiniowanie samej prostej jako klasy, porównywanie współczynników kierunkowych, itd.

Tak naprawdę to bardziej matematyczne niż informatyczne zagadnienia, a w momencie w którym jesteś w stanie przeprowadzić obliczenia na kartce i rozwiązać zadanie - jesteś w stanie napisać program który może to zrobić.
A
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@matthosu: wiem, że wszystkie punkty zajelyby zbyt długo, do tego nie da się podstawić wszystkich (dlatego dałem to w cudzyslowie)

Reszta tego co napisałeś brzmi dla mnie zupełnie obco, ale zainteresowało mnie to na tyle że postaram się zgłębić temat. Zawsze programowanie mnie jakoś odrzucalo, na studiach niby coś było ale na kartkach i zupełne podstawy.
  • Odpowiedz