'[+++ FLASH +++]/- - 물리'에 해당되는 글 9건

  1. 2011.01.22 2차원 충돌 (2D Collision) (6)
  2. 2010.02.12 2차원 충돌 (1)
  3. 2009.06.19 [ 00 ] 중력 & 반중력? 에서 제작할 무비 예제 [Gravity Play]
  4. 2009.06.11 [ 01 ] 중력 & 반중력 ?
  5. 2008.08.28 [수정필요]포물선 운동_05 (1)
  6. 2008.08.28 [수정필요]포물선 운동_04
  7. 2008.08.28 포물선 운동_03
  8. 2008.08.28 포물선 운동_02
2011.01.22 23:55
2D Collision


드디어 2차원 충돌을 구현했다. 위키 백과에서 공식을 찾았는데, 이 공식엔 반발계수도 포함되어 있어서 바로 써먹을 수 있었다..ㅋㅋ(->링크(영문))
//참고로, 영문버전의 위키가 상당히 자세하다....그래서 영문버전을 애용하기를...;;

V_{1f}=\frac{C_R M_2 (V_2 - V_1) + M_1 V_1 + M_2 V_2} {M_1+M_2}
V_{2f}=\frac{C_R M_1 (V_1 - V_2) + M_1 V_1 + M_2 V_2} {M_1+M_2}

이게 바로 충돌 후의 속도에 대한 식.....ㅋ

구현간에 약간의 애로사항이 꽃피었었는데, 문제는 회전변환을 해주는 매서드였다;;;;;;(행렬을 안만진지 오래되서 행렬의 곱셈 방법을 잘못 생각한...ㅋㅋㅋ) 
(회전변환에 대한 내용을 보고나서야 고쳤다....ㅋㅋ->링크)

 \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

이건 회전변환 매트릭스! (진짜 쓸모 많다능.....ㅋㅋ)

그리고,,,버그,,,,,,,가 나오지 않도록(두 원이 겹쳐서 계산이 계속되는 뭐 이런 버그...완벽히 해결됬는지는 모르지만,,,,) 두원이 충돌시에, 두 원이 접하도록(그러니까 겹치지 않고)만들어 주었다..

이번에 만든 클래스는 Ball, Physics2D인데,,,, Physics2D는 재활용 할 수 있도록 조금 손바주어 내 라이브러리에 넣어야겠다...ㅋㅋ

드디어 구현한 무비..ㅋ (클릭하면, 계속 진행됩니다.)
참고로, 반발계수가 적용되어 있다. e = 0.8

각 벡터의 모습을 보여주려 했는데, 그냥 속도 벡터만 표시.....

마지막으로 소스 코드.ㅋ

main.as



Physics2D.as


Ball.as





* 추가

공의 숫자를 늘리고(10) 중력까지 포함. 
반발계수를 넣었었지만, 겹치는 버그가 계속됨,,,(아마도, 세개 이상 겹치었을때 서로 접하려고 하다보니 다시 겹쳐지는 순환....어떻게 해결항 방법을....;;;)

무비는 아래 폴딩안에...

더보기



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

2차원 충돌 (2D Collision)  (6) 2011.01.22
2차원 충돌  (1) 2010.02.12
[ 00 ] 중력 & 반중력? 에서 제작할 무비 예제 [Gravity Play]  (0) 2009.06.19
[ 01 ] 중력 & 반중력 ?  (0) 2009.06.11
Trackback 0 Comment 6
  1. Favicon of http://estellenotes.tistory.com BlogIcon 에스텔시아 2011.01.23 17:02 신고 address edit & del reply

    이걸 보니까 왠지 Jt군이 보여준 라고아 물리엔진 볼 때 같은 감동이 밀려오는 듯한 느낌이 ㅎㅎ;;
    드네여.

  2. Ko Dong-Eun 2011.01.24 00:05 신고 address edit & del reply

    군대에서도 물리공부??ㅋㅋㅋㅋ 역시 공부의 神이군 ㅋㅋㅋㅋ

  3. Favicon of http://www.squidoo.com/ukdissertationwritinghelp BlogIcon ukdissertationwritinghelp 2011.01.31 14:51 신고 address edit & del reply

    It’s a great tip on Do It yourself stuff. Thanks!

  4. 2011.03.29 19:54 address edit & del reply

    비밀댓글입니다

  5. 2011.05.14 15:02 address edit & del reply

    비밀댓글입니다

  6. Favicon of http://podojam.tistory.com BlogIcon 포도잼 2011.06.06 02:03 신고 address edit & del reply

    와우~ 지나가다 들렸는데...다른 세계에 온 듯하군요.
    왜 저는 아인쉬타인이 생각날까요? 거참!

2010.02.12 01:32
2차원 충돌

1차원 충돌이야 그냥 아래 수식을 사용하면 되겠지만;;;;;;;;;;;;;

V_{1f}=\frac{(C_R + 1)M_{2}V_2+V_{1}(M_1-C_R M_2)}{M_1+M_2}

V_{2f}=\frac{(C_R + 1)M_{1}V_1+V_{2}(M_2-C_R M_1)}{M_1+ M_2}

2차원 충돌에서는 잘 안된다......

맨처음 생각으론, 그냥 x, y축 벡터만을 생각하여 위 공식을 사용해 봤지만, 전혀 아니다.

이유가, y축 벡터의 크기가 0일때, 두 원의 y위치가 약간 다를때, 충돌시 y벡터에도 영향을 줄 수 있어야 한다.

즉, x, y 벡터에 서로 관련이 있다는 뜻이니, x, y 벡터만 계산해서는 안된다.

따라서, 속도 벡터를 다른 축에 대하여 분해할 필요가 있다.


그전에 플생의 물리나라님께서 강의하신 내용을 보았지만, 어지러워서 머리속에 들어오질 않았다.

그래서 나만의 생각(?)으로 한번 만들어 보았다.


(충돌시에 멈추는건 분해된 벡터를 자세히 관찰하기 위함임. 클릭하면 계속 움직임.)

화면에 나온 숫자들을 설명하자면, 화면 좌측 상단의 값은 두 원의 운동량의 합이다.
하단 중앙에는 이젠 그닥 필요 없는 벡터간의 각도이다. x, y축 처럼 90도가 된 축으로 분해를 해야 해서 테스트 할때 그 각을 알 필요가 있었다.
(참고로, 위 무비를 다운 받아 실행한뒤, 100%에 크게 보면 아래에 숫자들이 또 있다. 이건 각원의 알파, 베타, 감마벡터의 값, 크기, 각도이다.)

이 공간은 무중력, 무마찰(?) 인 이상적인 공간이므로, 항상 운동량의 합은 같아야 한다. (외력이 작용하지 않으므로)

하지만, 값이 달라진다........................아놔;;;;;;; 달라지는 폭이 작으면 그닥 맘에 담아두지 않겠는데, 문제는 그 폭이 최대 3까지 치솟기 때문이다. (아직 더 큰 속도를 주지 않아서 더 큰 오차가 생겨날 수 도 있다.)

(위 무비에서는 각각 질량을 1, 벡터값을 5, 12, 4, 3 인가 를 주었다. 따라서 합한 운동량은 18이 되어야 한다)



글이 너무 짧아, 소스 코드도 첨부해본다. + 약간의 설명

(헐퀴!  이제까지 몰랐는데, 아래 소스 코드를 수정할 수 가 있었냉;;;;ㅋㅋ 그리고 주석 처리가 제대로 컬러링이 되지 않냉;;;)

main.as



Ball.as



Vector2D.as




네이밍 참;;;;; 벡터2디라니;;;;;ㅋㅋ

벡터 2디는 그냥 내 꼴리는 대로 작성해 본것이다...그런데 작성하면서 포인트클래스도 살짝 봤는데, 중복되는게 많다..... 그냥 포인트 상속 할껄 그랬나;;;에이 그래도..;;아놔;;;; 그냥 상속할껄 그랬나보다;;;ㅋㅋㅋ

아, 그런데 길이값을 조절해주는거에 약간 문제가 있다.

길이를 음수값으로도 받아오는데;; 벡터를 계산할때 반대 방향은 음수이기 때문에;;;; 그래서 파생된 문제가 길이를 출력하면 항상 양수만 나온다는거;;반대 방향인지 구분을 못한다;;; 음,...이건 귀찮아서 다음 기회에..(?)





중요한 부분은 메인 클래스의 벡터 계산 부분이다.

귀찮아서 텍스트만 보자면,

                var angle_l:Number = Math.atan2(A.y-B.y, A.x-B.x); // 주 원의 중심을 지나는 직선(편의상 L 이라 하겠음.)의 기울기
                var angle_va:Number = Math.atan2(A.v.y, A.v.x); // 원 A의 속도 벡터의 기울기
                var angle_vb:Number = Math.atan2(B.v.y, B.v.x); // 윈 B "
               
               
                //for A
                var gapanglea:Number = (angle_va - angle_l); // 말 그대로 직선 L과 A의 속도 벡터기울기의 차이값
                var la:Number = A.v.length * Math.cos(gapanglea); // 직선 L에 대한 A의 속도 성분 벡터. 간단하게 내적한거
                var gapangleb:Number = (angle_vb - angle_l);
                var lb:Number = B.v.length * Math.cos(gapangleb);
               
                A.Alpha.x = la * Math.cos(angle_l); // 충돌시에 영향을 주는 쪽의 벡터값(?뭔가 말이 이상한데...)
                A.Alpha.y = la * Math.sin(angle_l);
               
                A.Beta.x = A.v.x - A.Alpha.x; // 직선 L에 수직이면서 알파벡터에 수직인 벡터. 즉, 충돌시에 아무 영향을 주지 않는 벡터
                A.Beta.y = A.v.y - A.Alpha.y;
               
                //for B
                B.Alpha.x = lb * Math.cos(angle_l);
                B.Alpha.y = lb * Math.sin(angle_l);
               
                B.Beta.x = B.v.x - B.Alpha.x;
                B.Beta.y = B.v.y - B.Alpha.y;
               
                A.Gamma.theta = angle_l; // 충돌시에 반발계수를 사용해 다음 속도를 계산
                //A.Gamma.length = ((e + 1) * B.m * lb + la * (A.m - e * B.m)) / (A.m + B.m);
                A.Gamma.length = (A.m * la + B.m * lb + B.m * e * (lb - la)) / (A.m + B.m);
               
                B.Gamma.theta = angle_l;
                //B.Gamma.length = ((e + 1) * A.m * la+ lb * (B.m - e * A.m)) / (A.m + B.m);
                B.Gamma.length = (A.m * la + B.m * lb + A.m * e * (la - lb)) / (A.m + B.m);

최종벡터는 감마와 베타의 합벡터이다. (무비에선 자주색 선.)


음..... 쫌 조잡하긴 한데, 제대로(?) 계산되는것 같아서 그냥 나둠...


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

2차원 충돌 (2D Collision)  (6) 2011.01.22
2차원 충돌  (1) 2010.02.12
[ 00 ] 중력 & 반중력? 에서 제작할 무비 예제 [Gravity Play]  (0) 2009.06.19
[ 01 ] 중력 & 반중력 ?  (0) 2009.06.11
Trackback 0 Comment 1
  1. 노인 2010.02.14 23:18 신고 address edit & del reply

    플라스크씨...!! 아니...용사여.
    정말 열심히 업뎃 해주시는군....
    정벅님 티스토리 보다가 발견해서 도장찍고 감'ㅅ'!!(그런데 정벅이는 티스토리 갱신 안하나...)

2009.06.19 17:08

-6/ 19 업데잇-


무비 예제 입니다. 아직 미완성이라 글을 차차 쓰면서 업데잇할 계획입니다.



가만히 내비두면 저렇게 자취를 남깁니다.
(컴 사양을 많이 탑니다, 그래서 최적화 버튼을 만들어 봤었는데 제대로 동작하지 않아서  동작합니다..ㅋ.,)







장난 치는 방법은, 아래에 버튼을 보시면 됩니다.

컴 사양을 많이 타기에 저사양 유저분들은 플래시-우클릭-퀼리티-로우 설정을 해주시면 됩니다.

주기적으로 최적화 함수를 호출해서 어느정도 괜찮아 졌습니다...ㅎ


패치_01

화면 사이즈를 640x360 으로 크게 만들었습니다.
폭팔하는 혜성도 추가하였습니다.(add P2) 2개 이상, 27개 이하의 조각이 나옵니다.
역시 속도 벡터는 렌덤입니다.
무비 중심으로 부터의 거리가 600을 초과하면 해당 혜성은 사라집니다.
또한 중력공과 혜성의 거리가 8 미만이 되면 해당 혜성은 사라집니다.
만유인력 상수를 전버전에 비해 두배로 적용시켰습니다.




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009.06.11 13:04
요즘 테스트 중인 중력에 대해서 설명을 해볼까 합니다..

그러면, 중력(만유인력)은 무엇일까요?


중력 (만유인력)
질량을 가진 물질들 사이에 서로 당기는 힘이다.

서로 당기는힘,,,이라는거죠. 뉴턴의 만유인력의 법칙 아시죠?

                               F = G {m_1 m_2 \over r^2}

이게 중력에 대한 식인데요, 여기서 F는 중력, G는 만유인력 상수(6.6726×10-11N·㎡/kg2), m1, m2는 질량, r 는 두 물체사이의 거리입니다.           (그림 출처 : 위키)

하지만,,,플래시 공간에서는 2차원입니다......즉, 무비클립의 위치를 x, y 로 나타내야 한다는거죠.

그러면 벡터를 분해해야 합니다. 오래전에 포스팅한 포물선에서 보시면 아시겠지만,,,다시 그려봅니다...



대각선 화살표를 x축, y축에 대해서 분해를 한건데요, x축에 해당하는 화살표(벡터)는 벡터 F의 x성분이라고 하고 y축에 해당하는 화살표는 벡터 F의 y성분 이라고 합니다.


여기서 F의 크기를 구할 수 있으니(위에 있는 만유인력의 법칙) 각 성분을 구할 수 있겠죠?

Fx = F*Math.cos(θ)
Fy = F*Math.sin(θ)

이렇게 삼각함수로 나타낼 수 있습니다.

이것을 정리하면,

Fx = (G*m1*m2*diffX)/(r*r*r)
Fy = (G*m1*m2*diffY)/(r*r*r)

이렇게 됩니다. (diffX, diffY 는 두 물체의 x, y 의 차이, 자세한건 신명용님의 플래시 mx 액션 스크립트 1 물리편을 참조해 주세요.)

액션 스크립트(~2.0) 으로 나타내면,

var K:Number = -25;
//G*m1*m2 를 하나의 상수(K)로 생각한겁니다. 이건 마음대로 질량을 할당해주셔도 됩니다^^ 그런데, 여기서 수상한 점은 '음수'란건데요, 그 이유는 끌어 당기는 힘이기에 힘은 중심으로 향합니다,,,  반대로 양수가 되면 반중력이 되겠죠?
var tempx:Number = 0;
var tempy:Number = 0;
var i:Number=0;
var j:Number=0;

function dis(target1, target2) { // 두 무비클립 사이의 거리를 계산 (피타고라스)
    var diffX:Number = target1._x - target2._x;
    var diffY:Number = target1._y - target2._y;
    return Math.sqrt(diffX * diffX + diffY * diffY);
}

function GForceX(targetM, targetG) { //X축에 해당하는 중력 벡터
    var r:Number = dis(targetM, targetG);
    var diff:Number = targetM._x - targetG._x;
    var Fx:Number = K * diff / (r * r * r);
    return Fx;
}

function GForceY(targetM, targetG) { //Y축에 해당하는 중력 벡터
    var r:Number = dis(targetM, targetG);
    var diff:Number = targetM._y - targetG._y;
    var Fy:Number = K * diff / (r * r * r);
    return Fy;
}

function MoveBall(targetM, targetG) { //중력이 작용하는 공을 움직이게
    targetM.tempx += GForceX(targetM, targetG);
// 힘은 가속도x질량 이라서 임시(위치) 변수에 담고 이걸 속도 벡터에 더한뒤 다시 속도 벡터를 무비클립의 _x, _y 에 더합니다.
    targetM.tempy += GForceY(targetM, targetG);
    targetM.vx += targetM.tempx;
    targetM.vy += targetM.tempy;
    targetM._x = targetM.ox + targetM.vx;
//ox는 오리지널 x, 즉, 이 공이 생성된 위치 입니다..
    targetM._y = targetM.oy + targetM.vy;
}

function varGen(MBname) { // 중력이 작용하는 공 무비클립에 변수를 생성해주고 변수값을 초기화
    MBname.tempx = 0.5; //초기 속도의 x성분 벡터가 0.5
    MBname.tempy = 0.5; //초기 속도의 x성분 벡터가 0.5
    MBname.vx = 0;
    MBname.vy = 0;
    MBname.ox = MBname._x;
    MBname.oy = MBname._y;
}

_root.onLoad = function() { // 무비 로드시 중력이 작용하는 공에 변수 생성및 초기화
        varGen(_root["MB"+1]);
};

_root.onEnterFrame = function() { // 매 프레임마다 중력이 작용하는 공을 움직임
            MoveBall(_root["MB"+1],_root["GB"+1]);
};



< 다음 글 내용은~? >

지금 상태는 중력이 작용하는 공 1개, 중력공 1개인데요,,,,

1개씩만 장난치면 재미가 없겠죠?

다음 글에는 여러개의 공을 가지고 노는 방법 및 중력이 작용하는 공 과 중력공과의 직선 잇기, 자취 만들기가 되겠습니다...



궁금하신건 코맨트를 달아주세요, 그러면 제가 아는 한도내에서 답변을 드립니다^^
저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008.08.28 19:57
5번째 글입니다.

이제까지 포물선 운동을 구현해 보았습니다.

이제까진 수류탄이나 돌맹이를 던지는것을 구현했죠.

오늘은 '화살'을 구현해봅시다.


먼저 생각해봅시다.

화살이라...

수류탄은 그냥 포물선 공식을 써주고 각도는 맘대로하고 날아가면 되지만...

화살은.....포물선의 접선에 대해서 각도가 변해야하죠..

그럼 이걸 어떻게 표현해야할까요?

접선이라....접선 하시면 떠오르는거 없으세요? 바로 '미분' 이죠. 오늘은 '미분의 개념'을 이용해서 화살을 표현해볼껍니다.


미분이라....

미분은 잘게 잘라놓은것이죠.

그럼 플래시에선 어떻게 잘게 자를까요? (dx 를 뜻하는것이죠.)

바로 플래시의 시간의 단위인 '프레임'을 쓸겁니다.

프레임을 기본단위로 하여 기울기를 구해봅시다.

기울기라.. 기울기는 Δy/Δx 죠? (Δ는 델타)

가정을 한번 해봅니다. 화살이 1, 2 프레임 진행했다고 합시다.

지금 현재는 2 프레임이니 2프레임에서의 기울기를 표현해야죠.

그럼 1프레임에서의 x, y값을 알고 2프레임에서의 x, y 값을 알수 있으니 기울기를 구할수 있겠죠?

이걸 액션 스크립트로 나타내면 다음과 같습니다.

diffX = mc._x - beforeX;
diffY = mc._y - beforeY;
beforeX = mc._x;
beforeY = mc._y;

음미 해봅시다...음.......

현 재 프레임(1)에서 beforeX, Y 는 mc의 x, y 값을 저장해두고, 다음 프레임(2)에 가서 현재의 프레임(2) 에서의 mc의 x, y 값에서 저장한 값(beforeX, Y)을 빼주면 diif(델타)X, Y 가 나오게 되죠..

그런데 생각해보니, 저렇게 해서 구한 기울기 값은 탄제트 값이 나오게 됩니다. (탄젠트(tan) 다들 아시죠? 높이/밑변)

하지만 우리가 필요한건 육십분법의 각을 알야야합니다. (왜냐하면, 무비클립의 각도를 ._rotation으로 할것이니까요.)

그래서 탄젠트의 역함수, 아크 탄젠트2(atan2)를 씁니다.

mc._rotation = Math.atan2(diffY, diffX)*180/Math.PI;

라고 해주면 되겠습니다.

이해 가시나요? (아크 탄젠트는 탄젠트의 역함수라서 y, x 위치가 바뀐건가..;;)
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

[ 01 ] 중력 & 반중력 ?  (0) 2009.06.11
[수정필요]포물선 운동_05  (1) 2008.08.28
[수정필요]포물선 운동_04  (0) 2008.08.28
포물선 운동_03  (0) 2008.08.28
Trackback 0 Comment 1
  1. 지나가는이 2009.12.25 16:43 신고 address edit & del reply

    유용한 강좌 잘 봤습니다~ 감사합니다~

2008.08.28 19:57
예제를 봐봅시다.

<예제 소스>

//변수들
var V0:Number = 0;
var theta:Number = 0;
var t:Number = 0;
var G:Number = 10;
var F:Number = 25;
var Fw:Number = 0;
var wtheta:Number = 0;
var m:Number = 1;
var Vx:Number;
var Vy:Number;
var i=0;

//리셋 펑션
function reset(){
    _root.ball._x = 400;
    _root.ball._y = 300;
    Vx = 0;
    Vy = 0;
    t=0; //퀴즈 왜 리셋시에 t를 0으로 만들까요?
}
reset();


onEnterFrame = function(){ // 매 프레임마다
    if(_root.ball._x > 800 || _root.ball._x<0 || _root.ball._y>1000 || _root.ball._y<-400){ reset();}
//해당 범위를 넘어가면 리셋 함수 호출

    theta = int(_root.DT.text)*Math.PI/180
//오늘의 핵심.

    V0 = F/m; // 초기 속도 구하기.

    Vx = V0*Math.cos(theta) + t*Fw*Math.cos(wtheta)/m
    Vy = V0*Math.sin(theta) - G*t - t*Fw*Math.sin(wtheta)/m

    _root.ball._x+= Vx;
    _root.ball._y-= Vy;
    t+=0.1; // t 값 증가시키기

//트레이서(추적)
    _root.attachMovie("ball", "ball"+i, i)
    var mc = _root["ball"+i]
    mc._x = _root.ball._x;
    mc._y = _root.ball._y;
    mc._alpha = 10
    mc._xscale = 50;
    mc._yscale = 50;
    i++;
}



오늘의 핵심을 봅시다,

theta = int(_root.DT.text)*Math.PI/180


바로 세타에 관한 식입니다.

매스 클래스의 코사인, 사인 함수를 보면 괄호안에 들어가는 값들은 우리가 말하는 각(육십분법이죠. 90도(직각), 45도  이렇게 말이죠.)
이 아니라 호도법으로 들어가야합니다. 바로 '라디안(rad)' 인데요...이건 수학 10-나에 나오는 내용이죠. 어쨋든,

괄호 안에는 호도법이 들어가야 제대로된 코사인, 사인 값을 얻을수 있습니다.

그러면 호도법은 어떻게 구할까요?

 1π 라디안이 180도이므로,

60분법*π/180 해주면 됩니다.

퀴즈 답)
t=0이 없는 채로 컴파일 시켜보세요. 그럼 공에 중력 가속도가 게속 붙어있는 상태가 되어서 실제 움직임처럼 표현되지 않습니다.
그래서 리셋시에 t 를 0으로 만들어줘서 초반 움직임에 중력가속도가 서서히 붙게 한것입니다.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

[수정필요]포물선 운동_05  (1) 2008.08.28
[수정필요]포물선 운동_04  (0) 2008.08.28
포물선 운동_03  (0) 2008.08.28
포물선 운동_02  (0) 2008.08.28
Trackback 0 Comment 0
2008.08.28 19:57
3번째 글입니다.

오늘은 포물선의 초기속도를 힘으로 표현할껍니다.

일단......물리에서 나오는 유명한 공식!

F = ma (모르시는 분들은 위해 F 는 힘(N), m 은 질량(kg), a 는 가속도(m/s^2)입니다.)

이것을 이용해서 속도를 나태내어봅시다.

F = ma 를 변형시키면

F=m*v/t 입니다. (자세한 유도 : a 는 m/s^2, v 는 m/s 인데, v를 s(시간)으로 나눠주면 a=v/t 가 되겠죠.)

이제 이항해봅시다.(v 가 앞으로 나오게 해야되겠죠?)

v = F*t/m

이제 됐습니다.

그런데 식을 보면... t (시간) 변수가 있습니다. 이것은 힘을 주는 시간입니다. 힘을 오랜 시간동안 주면 속도가 빨라지겠죠?

하지만 지금 만드는 포물선운동은 힘을 주는 시간이 일정하다고 생각합니다. 그래서 t=1 로 두고,

v = F/m

라고 하면 됩니다.



이제 거의 끝이 났군요. 전에 유도한 공식에 대입해보면,

V0 = F/m;

Vx = V0*Math.cos(theta) + t*Fw*Math.cos(wtheta)/m
Vy = V0*Math.sin(theta) - G*t - t*Fw*Math.sin(wtheta)/m

완성입니다.



<부록>

[이제까지 쓰인 변수들]

var Vx:Number;
var Vy:Number;
var V0:Number = 0;
var theta:Number = 0
var t:Number = 0;
var G:Number = 10;
var F:Number = 0;
var Fw:Number = 0;
var wtheta:Number = 0;
var m:Number = 10;
저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

[수정필요]포물선 운동_04  (0) 2008.08.28
포물선 운동_03  (0) 2008.08.28
포물선 운동_02  (0) 2008.08.28
포물선 운동_01  (1) 2008.08.28
Trackback 0 Comment 0
2008.08.28 19:56
2번째 글입니다.


포물선 운동_01 에서 도출해낸 공식입니다.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

Vx = V0*Math.cos(theta)
Vy = V0*Math.sin(theta) - G*t

+++++++++++++++++++++++++++++++++++++++++++++++++++++++


오늘은 바람을 넣을 차례입니다.

먼저 바람이 불어 가는 방향(wtheta)과 바람의 세기(Fw)를 고려합니다.

그럼 아래와 같은 공식이 도출되죠.

Vx = V0*Math.cos(theta) + t*Fw*Math.cos(wtheta)
Vy = V0*Math.sin(theta) - G*t - t*Fw*Math.sin(wtheta)

됬나요?

그 런데 바람의 영향은 질량이 클수록 덜 받습니다. 왜냐구요?  바로 관성때문이죠. 질량이 클수록 자기가 운동하고있는 쪽으로 운동하니 바람의 영향을 받으려면 더 큰 힘을 줘야합니다. 어쟀든... 바람의 영향은 질량에 반비례하니 1/m 을 곱해주면 되겠죠?


Vx = V0*Math.cos(theta) + t*Fw*Math.cos(wtheta)/m
Vy = V0*Math.sin(theta) - G*t - t*Fw*Math.sin(wtheta)/m

이제 끝이군요.

다음편에서는 초기 속도 V0으로 나타내지 말고 힘으로 나타내 봅시다.


퀴즈)
왜 힘으로 표현하려할까요? 귀찮게..;
저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+++ FLASH +++] > - - 물리' 카테고리의 다른 글

[수정필요]포물선 운동_04  (0) 2008.08.28
포물선 운동_03  (0) 2008.08.28
포물선 운동_02  (0) 2008.08.28
포물선 운동_01  (1) 2008.08.28
Trackback 0 Comment 0


티스토리 툴바