비주얼베이직6 움직임에 관한 수학공식 정리
1. 부드러운 움직임(
Smooth movement)
폼에 커맨드박스와 타이머를 배치하고, 타이머의 Interval를 1로두시고 코드 편집으로 돌아갑니다.
Private Sub Timer1_Timer()
Command1.Left = Command1.Left + 0.1 * (4000 - Command1.Left)
'개체의 X축 = 개체의 X축 + 속도 * (종착 X축지점 - 개체의 X축)
End Sub
코드를 보시면 먼저 괄호 안의 식부터 계산됩니다. 종착 X축지점인 4000에서 0만큼 뺍니다. (Command1.Left의 초기값이 0이라고 가정) 그 후에 4000이란 값이 나와서 10으로 나누어 400이란 값을 가집니다. 그리고 다시 실행되어 4000에서 400을 뺀 3600에다 10을 나누고 그 값에다 400을 더해 760이란 값을 가집니다. 다시 4000에서 760을 빼고 10을 나누고 760을 더하죠. (760 + 324) 이렇게 점점 이동할수록 값이 작아져 자연스러운 움직임을 가집니다. 속도가 크면 클수록 도착하는 속도는 빨라집니다.
2. 파동(
Wave)
Dim 주기 As Integer
Dim 진폭 As Integer
Dim 파장 As Integer
Dim 시간 As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
진폭 = 50 '파형의 중심에서 최대 높이까지의 길이, 최소 길이
파장 = 200 '골과 골 사이의 거리
시간 = 0
주기 = 2 '한 파장만큼의 거리를 이동하는데 필요한 시간
End Sub
Private Sub Timer1_Timer()
Command1.Left = Command1.Left + 10
Command1.Top = 진폭 * Sin(2 * 3.141592 * 시간 / 주기 - 2 * 3.141592 * Command1.Left / 파장) + 200
'여기서 200은 초기 Y 좌표, 파동 공식을 그대로 가져옴
'y = Asin(2
π/T*t - 2π/A*x)시간 = 시간 + 0.05
End Sub
<파동 공식>
3. 원 그리기(
Draw a Circle)
Dim 각도 As Integer
Dim 반지름 As Integer
Dim 호도 As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
반지름 = 1050
End Sub
Private Sub Timer1_Timer()
각도 = 각도 + 10
If 각도 > 360 Then: 각도 = 0 '오버플로 방지, 360을 넘어갈 때 0으로 초기화
호도 = 각도 * 3.141592 / 180
Command1.Left = 1000 + 반지름 * Sin(호도) '초기 X 좌표 + 반지름 * sin(호도)
Command1.Top = 1000 + 반지름 * Cos(호도) '초기 Y 좌표 + 반지름 * cos(호도)
End Sub
4. 포물선 운동(Parabolic motion)
Dim 중력가속도 As Integer
Dim 초기각도 As Integer
Dim 초기속도 As Integer
Dim 벡터X As Integer
Dim 벡터Y As Integer
Private Sub Form_Load()
초기속도 = 100
초기각도 = 60
중력가속도 = 1
벡터X = 초기속도 * Cos(초기각도 * 3.141592 / 180) '초기 수평속도
벡터Y = -초기속도 * Sin(초기각도 * 3.141592 / 180) '초기 수직속도
End Sub
Private Sub Timer1_Timer()
벡터Y = 벡터Y + 중력가속도
Command1.Left = Command1.Left + 벡터X
Command1.Top = Command1.Top + 벡터Y
End Sub
<포물선 운동>
5. 충돌(Collision)
Dim 반발계수 As IntegerDim A공질량 As IntegerDim B공질량 As IntegerDim A초기속력 As IntegerDim B초기속력 As Integer'충돌감지함수 출처: http://cafe.naver.com/gogoomas/5435 / 고구마(hananthony)Public Function 충돌감지(X1 As Long, Y1 As Long, W1 As Long, H1 As Long, X2 As Long, Y2 As Long, W2 As Long, H2 As Long) As BooleanDim Distance As Long, Temp As LongDistance = (((W1 / 2) + X1) - ((W2 / 2) + X2)) ^ 2 + (((H1 / 2) + Y1) - ((H2 / 2) + Y2)) ^ 2Temp = (W1 + W2) / 2If Distance < Temp ^ 2 Then 충돌감지 = TrueEnd FunctionPrivate Sub Form_Load()A공질량 = 700A초기속력 = 1B공질량 = 200B초기속력 = -30반발계수 = 1End SubPrivate Sub Timer1_Timer()If A.Left < 0 Or A.Left > 8650 ThenA초기속력 = -A초기속력End IfIf B.Left < 0 Or B.Left > 8650 ThenB초기속력 = -B초기속력End IfIf 충돌감지(A.Left, A.Top, A.Width, A.Height, B.Left, B.Top, B.Width, B.Height) ThenA초기속력 = (A공질량 - 반발계수 * B공질량) / (A공질량 + B공질량) * A초기속력 + (B공질량 + 반발계수 * B공질량) / (A공질량 + B공질량) * B초기속력B초기속력 = (A공질량 + 반발계수 * A공질량) / (A공질량 + B공질량) * A초기속력 + (B공질량 - 반발계수 * A공질량) / (A공질량 + B공질량) * B초기속력End IfA.Left = A.Left + A초기속력B.Left = B.Left + B초기속력End Sub
'알고리즘, 자료구조' 카테고리의 다른 글
자료구조 4강. 트리(Tree) (4) | 2013.01.23 |
---|---|
자료구조 3강. 큐(Queue) (4) | 2013.01.15 |
자료구조 2강. 스택(Stack) (8) | 2013.01.09 |
자료구조 1강. 리스트(List) (20) | 2013.01.01 |
알고리즘 1-1강. 정렬 (16) | 2012.05.27 |