Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 

Repository files navigation

PyPhysic

코드 설명:

  1. 첫 번째 장면에서는 수평면을 향하여 공을 자유낙하시키고, 공이 수평면에 닿았을 때 튕겨져나오는 것을 보여준다.
  • 물리I 활용 - 충돌 시 처음 속력의 절반으로 줄어드므로, 운동 에너지는 1/4로 줄어 역학적 에너지 보존 법칙에 의해 공의 최고점 높이가 1/4로 게속 줄어드는 모습을 print되는 숫자들 중 첫 숫자에서 관찰할 수 있다.
  • 물리I 활용 - 또한 print되는 숫자들 중 두번째 숫자는 최고점에 도달한 시각을 의미하고, 최고점에서 튕겨난 후 최고점에 도달하는 시간차를 관찰하면 등가속도 운동 공식에 따라 시간차가 약 1/2로 계속 줄어드는 모습을 관찰할 수 있다.
  1. 두 번째 장면에서는 빗면을 향하여 공을 자유낙하시키고, 공이 빗면에 닿았을 때 튕겨져나오다가 굴러가는 것을 보여준다. 시간차가 1/2로 줄어드는 모습이 관찰된다. <- 검증 필요
  • 물리II 활용 - 힘, 속도, 위치를 벡터로 나타내고, 충돌 시 공이 받는 충격을 벡터의 회전과 벡터의 성분을 이용하여 구하였다.
  • 물리II 활용 - 물리II의 포물선 운동의 원리를 이용하여 충돌 후 포물선으로 운동하는 공의 모습을 구현하였다.
  1. 세 번째 장면에서는 두 빗면을 향하여 공을 자유낙하시키고, 공이 빗면에 닿았을 때 튕겨져나오고, 굴러가고, 두 빗면이 만나는 지점에서 공이 정지하는 것을 보여준다.
  • 물리II 활용 - 힘의 합성을 이용하여 두 빗면에서 받는 수직항력을 동시에 적용한다.

찾아본 부분:

  1. PyGame 기본 세팅
  2. PyGame으로 도형 그리기
  3. PyGame으로 장면 전환 구현 (제미나이 이용)
  4. tan값으로 sin과 cos을 가장 효율적으로 구하는 방법 (cot 이용 X)
  5. 행렬 연산을 위해 numpy 이용
  6. Box, Ground객체 기본 설정 (배드가이 이용)

제미나이 프롬프트 "나는 PyGame을 어제 시작했는데, PyGame으로 한 장면에서 a == 1일때 다른 장면으로 전환하는 코드를 만들어줄수 있어?"

문제와 해결 과정:

  1. 물체가 가끔 빗면에 충돌 후 즉시 정지하거나 빗면을 통과한다, 빗면에 물체가 굴러갈 때, 마치 빗면 위에 물체가 떠있는 듯 보였다.
  • PyGame의 원 그리기에서 물체의 중심을 설정하는 방식이 잘못되어 시각화된 상황과 코드에서 작동하는 상황이 달랐던 문제를 해결하였다. 이를 통해 남에게서 가져온 코드를 제대로 이해하지 못하였을 때 발생하는 문제점을 체감하였다.
  • 위를 적용하여도 현상이 남아 있자, 충돌 감지 방식을 공이 바닥을 통과하지 못하도록 수정하고, 바닥 충돌 판정이 여러 번 발생하는 것을 막기 위해 충돌 즉시 공의 위치를 바닥 위로 보정하였다. 하지만 그 결과 정확성과 일반성을 약간 희생하게 되었고, 추가적인 문제도 생기게 되어, 추후 이 문제를 해결할 더 근원적인 방법을 찾아보아야겠다.
  1. 빗면에 물체가 충돌하였을 때 의도하지 않은 방향으로 물체가 튕겨나갔다.
  • PyGame에서의 y축의 방향이 일반적인 y축의 방향과 다름이 문제를 일으킬 수 있음을 파악하고, y축의 방향을 돌린 후 연산, 복원하여 문제를 해결하였다. 대략적인 느낌이 비슷하다고 '동일하게 작동하겠지?'라고 어림짐작하면 문제가 발생할 수도 있음을 느꼈다.
  1. 삼각함수 간의 변환이 정상적으로 작동하지 않는다.
  • 이 문제는 변수값을 print하여 확인하는 디버깅 방식을 사용하여 오류를 검출하였다. (체스 프로젝트에서 사용했던 방식) 삼각함수 간의 변환 방법을 검색하여 나의 코드와 비교하고, 내가 실수한 부분과 고려하지 않은 부분을 수정하였다.
  • 이것과 물리엔진 구현 이외의 자잘한 구현을 다른 사람과 도구의 도움을 받아 완성하는 것에서, 다른 정보를 이용하는 것의 효율성을 느꼈다.

남아있는 문제점:

  1. 시간차와 최고점 높이가 물리학적 계산 결과와 약간 불일치한다 - 시간 단위를 무한정 쪼갤 수 없기 때문에, 물체가 땅에 박히지 않도록 보정하기 때문에 발생하는 것으로 추정된다.
  2. 위치 보정을 적용한 이후 바닥에 있는 공이 스스로 위아래로 진동하기 시작했다

소감

  1. 체스 프로그램 개발 활동으로 얻은 역량을 활용할 수 있는 기회가 되었음.
  2. 체스 프로그램 개발 전 협업을 위해 학습한 Github 사용법이 코드 관리에 도움이 되었음을 느낌.
  3. 코딩과 교과를 연결하는 과정이 흥미로웠고, 프로그래밍 활동이 교과 복습에도 도움이 되었음.
  4. 이후 추가적인 코딩 활동을 이어나가면서도, 이 프로젝트를 나의 물II 추가학습에도 이용해볼 생각이 있음.

향후 구현하고 싶은 것

  1. 세로로 수직인 벽 (Ground의 정의에 기울기가 포함되어 있어, 완전히 수직인 벽을 구현할 수 없다.)
  2. 공끼리의 충돌

프로그램화시 이점

  1. 실제로 동역학 시뮬레이션이 필요한 경우 (ex. 골드버그 장치 시뮬레이션)
  2. 게임의 물리적 상황에서의 사용 (ex. 플랫포머형 게임)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages