2016-12-25 4 views
1

현재 2D 입자 시뮬레이터를 연구 중입니다. 각 입자는 독특한 각도로 움직입니다. x와 y 속도를 변경하는 기본 공식을 찾았지만 현재 각도에 따라 움직이는 속도가 설정되어 있습니다.2D 수직 각도 충돌

particles[a][3] += particles[a][1] * cos(radians(particles[a][5]));//move X 
particles[a][4] += particles[a][1] * sin(radians(particles[a][5]));//move Y 

벽에 충돌에 대한 기본 충돌이 있지만 충돌을 정렬하는 가장 좋은 방법을 찾을 수 없습니다. 현재 회전을 -1로 곱하면되지만 위쪽과 아래쪽에서만 작동합니다. 참고 : 파티클은 충돌을 실행 한 후에 항상 움직입니다 (충돌 상자에 갇히지 않고 빠져 나오지 않음).

if(particles[a][3] < 0 || particles[a][3] > windowWidth/2 || particles[a][4] < 0 || particles[a][4] > windowHeight/2) { 
    /*windowWidth and windowHeight are divided by 2 to find the canvas size. In the setup() I have the canvas set to that value).*/ 
    particles[a][5] *= -1; 
} 

배열 값 :

particles[a][1] = speed 
particles[a][3] = x position 
particles[a][4] = y position 
particles[a][5] = rotation 

내 질문이 충돌 테스트를 실행하는 가장 좋은 방법입니다 것입니다. 나는 충돌이 90도에서 튀어 오른다는 것을 이해하지만 지루한 묶음 대신 가능한 한 적은 수의 if 문을 사용하는 것이 좋습니다 (더 간단할수록 좋음).

메리 크리스마스, 미리 감사드립니다!


알아 냈어! 최종 코드 :

if(particles[a][4] < 0 || particles[a][4] > windowHeight/2) { 
    particles[a][5] *= -1; 
} else if(particles[a][3] < 0 || particles[a][3] > windowWidth/2) { 
    particles[a][5] = 180 - particles[a][5]; 
} 

답변

0

"자바 스크립트 각도를 반영하는"인터넷 검색을 시도하고 당신은 X와 Y 축 모두 주위에 반영하기위한 공식을 찾을 수 있습니다. 상단 또는 하단과 충돌 할 때 하나를 수행하고 왼쪽 또는 오른쪽과 충돌 할 때 다른 하나를 수행합니다.

또한 배열을 사용하여 데이터를 보유하지 않아야합니다. 값을 보유하는 클래스를 만든 다음 해당 클래스의 인스턴스를 만듭니다. 마술 배열 색인을 사용하는 것은 두통의 처방이다.

여전히 작동하지 않는다면 MCVE을 게시하여 보내 드리겠습니다. 행운을 빕니다.

+0

대체로 완전히 열립니다. 인스턴스에 대한 권장 학습 가이드가있는 링크를 나에게 보낼 수 있습니까? javascript를 확인하면 이제 각도를 반영합니다. – bdkopen

+0

y 축을 정확하게 반사 시키십시오. 인스턴스에 대해 배우는 데 여전히 관심이 있습니다. – bdkopen