Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript]Wykrycie kolizji między wycinkiem koła, a kołem
radziopoke
post
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

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


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)

Ten post edytował radziopoke 12.02.2017, 14:59:42
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


W Pascalu, ale może się przyda: http://www.pascalgamedevelopment.com/showt...ision-detection
Są tam jakieś rozwiązania.


--------------------
Go to the top of the page
+Quote Post
radziopoke
post
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

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


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
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 Aktualny czas: 20.08.2025 - 13:44