Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Wykrycie kolizji między wycinkiem koła, a kołem
Forum PHP.pl > Forum > Przedszkole
radziopoke
Poszukuję jakiegoś prostego sposobu by wykryć czy wycinek koła nachodzi na koło.

najlepiej zobrazuje to skrypt:
  1. <canvas id="canvas" width="300" height="300"></canvas>
  2. var c = document.getElementById('canvas');
  3. var ctx = c.getContext("2d");
  4. function drawCircle(x, y){
  5. ctx.beginPath();
  6. ctx.arc(x, y, 20, 0, 2 * Math.PI);
  7. ctx.fill();
  8. }
  9. setInterval(function(){
  10. ctx.clearRect(0,0,300,300);
  11. ctx.fillStyle = "#f00";
  12. drawCircle(200, 150);
  13. drawCircle(130, 250);
  14.  
  15. var direction = Math.random()*2;
  16. ctx.beginPath();
  17. ctx.arc(150, 150, 100, direction * Math.PI, (direction+0.3) * Math.PI);
  18. ctx.lineTo(150, 150);
  19. ctx.fillStyle = 'rgba(0,0,255,0.6)';
  20. ctx.fill();
  21. }, 1000);

Tutaj przykład działania kodu powyżej:
https://jsfiddle.net/5Ld2evrb/1/

Czy jest jakiś prosty sposób, by sprawdzić czy niebieski wycinek koła nachodzi na który kol wiek z czerwonych kół?
Bo wiem, że jednym z podstawowych warunków to będzie sprawdzenie czy:
promień wycinka + promień koła > odległość środków tych elementów (to jest akurat proste)
trueblue
W Pascalu, ale może się przyda: http://www.pascalgamedevelopment.com/showt...ision-detection
Są tam jakieś rozwiązania.
radziopoke
trochę trudno mi ogarnąć co dzieje się w tym pascal-u. Choć kiedyś się go uczyłem. Wpadłem jednak na dość prosty sposób zbadania kolizji.
A dokładniej:
1. Tworzę nowy canvas tylko do kolizji,
2. Na nim rysuję pierwszy obiekt (np. wycinek koła).
3. Następnie zmieniam globalCompositeOperation na 'destination-in' (może być też 'source-in')
4. ostatecznie sprawdzam czy jakieś piksele nie mają wyższej wartości niż 0. Jeżeli tak to wystąpiła kolizja.

Jest to chyba najmniej skomplikowane, a że kolizję będę sprawdzał raz na jakiś czas (co ok minutę) to aż tak nie zależy mi na szybkości sprawdzania kolizji.

Gdyby te obliczenia były by prostsze to może bym z nich skorzystał smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.