6월, 2019의 게시물 표시

저항력, 중력 벡터 GUI구현

이미지
Drag force and Gravity 이번에는 Python, PyQt5를 이용해 구현한 저항력(Drag force), 중력(Gravity) 예제를 소개하려 합니다. 자세한 소스코드는 맨 뒤에 살펴보고, 일단 수식 유도과정과 결과만 살펴보겠습니다. 앞 게시물인 벡터(1편) , 힘과 가속도(2편) 에 이어지는 내용입니다. 1. 유체 저항 어떤 물체가 공기나 물속에서 받는 저항을 어떻게 프로그래밍으로 구현할 수 있을까요? 아래는 유체 저항(벡터, 힘)을 구하는 수식입니다. 각각, F 는 저항력, C는 저항 계수, A는 유체와 닿는 앞면적, p는 액체밀도, V는 속도의 방향을 뜻하는 단위벡터입니다. 저항력 F 벡터를 구해 속도의 방향과 반대로 적용 해 주면 힘이 감소 됩니다. [유체저항 공식] 앞 게시물에서 가속도는 속도 에 영향을 미치고, 속도는 위치 에 영향을 미친다는 사실을 살펴보았습니다. 또한 가속도, 속도, 위치는 벡터라는 것도 살펴보았습니다. 실제 우리가 사는 세계나 정확한 계산이 필요한 시뮬레이션 소프트웨어라면 위의 수식에 들어가는 계수(Coefficient)들을 정확하게 측정해서 적용 해야 하겠지만 우리가 만드는 코드는 꼭 정확해야 할 필요는 없습니다. 왜냐하면, 프로그래머인 내가 창조하는 소프트웨어 속 세상에서 유체저항을 내가 원하는 대로 만든다고 해도 누가 뭐라 할 사람은 없습니다. 이해를 돕기 위해 위의 유체저항 공식을 재 구성해 보겠습니다. 위 수식에서 저항계수(C), 물체 앞면적(A), 액체 밀도(p)는 프로그래머가 편리하게 상수를 정해 쓰면 됩니다. 예) 저항계수(C) : 0.1, 물체 앞면적(A) : 무시, 액체 밀도(p) : 1 ... 이렇게 생각하면 위 유체저항 수식은 아래와 같이 간략히 만들어 볼 수 있습니다. 저항력(힘, 벡터) =  속도(벡터) * ...

힘과 가속도 벡터 GUI 구현

이미지
Force and Acceleration 이전 벡터 마우스 트래킹예제 는 나름 훌륭하지만 조금 아쉬운 부분이 있습니다. 바로 이동 물체에 대한 질량 개념 이 없어 가속도 구현이 마치 자석에 이끌리듯 마우스를 쫓아 가는 모습이었습니다. 이제 뉴턴의 제2 운동법칙 F=MA 을 적용해볼 시점이 된 것 같습니다. F(Force)는 힘 이고, M(Mass)은 질량 , A(Acceleration)는 가속도 입니다. 따라서 힘은 질량과 가속도를 곱한 값 입니다. 이 수식을 살짝 바꾸면 아래와 같습니다. A = F / M (가속도는 힘을 질량으로 나눈 값이다) 즉, 있는 힘을 다해 밀더라도 물체가 무겁다면 가속도는 느려지겠지요. 살짝 밀더라도 물체가 가볍다면 빠르게 가속할 것입니다. 조금 더 이해를 쉽게 하기 위해 M(질량)이 1이라고 가정한다면 A = F 라는 결과를 얻고, 바로 가속도는 힘과 같습니다. 이 원리를 이용해 중력을 흉내내는 코드를 만들어 보았습니다. [예제 실행화면] 먼저, 물체의 위치, 속도, 가속도 벡터를 묶어서 클래스로 만듭니다. 1. mover.py 파일 코드 from Physics.vector import vector from PyQt5.QtGui import QColor from random import randint class Mover: def __init__(self, x=0.0, y=0.0, mass = 1.0): self.location = vector(x,y) self.velocity = vector() self.acceleration = vector() # 질량 self.mass = mass self.G = 1.0 self.color =...

벡터, 크기와 방향을 갖는 물리량의 시각화

이미지
Vector and Mouse Tracking 벡터(vector) 는 무엇일까요? C++언어를 공부한 사람이라면 벡터 (std::vector)는 가변형 배열로 생각할 수도 있습니다. 오늘 예제를 통해 공부할 벡터는 고등 수학에서 배우는 유클리드 벡터 를 의미합니다. 바로 크기와 방향을 모두 갖는 물리량 입니다. 무게(1kg) , 거리 (1m) 등 크기만을 가지는 양을 스칼라 라고 하고, 벡터는 여기에 방향이 같이 더해진 개념입니다. 예) 집에서 40도(북동쪽) 방향으로 5km 떨어진 곳에 호수가 있다. [벡터의 예] 프로그래밍을 공부하는데 뜬금없이 왜 벡터를 이야기하나 생각하실 수도 있지만, 우리가 즐겨하는 게임의 세계는 대부분 벡터라는 개념을 이용해 컴퓨터 세계에 창조되어 있습니다. 위치, 이동, 회전, 중력, 속도, 가속도  등의 요소가 들어간 게임이라면 틀림없이 벡터를 사용합니다. 아직 무슨 말인지 잘 이해가 안되리라 생각합니다. 먼저 오늘 만들 주제의 결과물을 한번 보시죠. 위 예제는 Python, PyQt5 을 이용해 만들었으며 벡터를 이용해 마우스를 따라오도록 만든 예제 입니다. 제가 좋아하는 책인 'Nature of Code' (저자:다니엘 쉬프만) 을 참조해 만들어 보았습니다. 해당 책에서 저자는 ' 프로세싱 언어 '를 이용해 코드를 구현하고 있습니다. 프로세싱 언어는 C++ 언어와 문법이 유사하며, 간단한 명령을 통해 시각적인 효과를 바로 확인해 볼 수 있는 프로그래밍 언어입니다. 프로세싱 언어를 모른다고 걱정할 필요는 없습니다. C...

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기