책보고 물리공부.

높이와 각도로 사선 길이 구하기, 일량 구하기.

15/1/22 목

* 운동에너지: K = (1/2)*m*(v^2) (m: 질량, v: 속도)
* 위치에너지: U = mgh (m: 질량, g: 중력 가속도, h: 높이)

* 역학적 에너지 보존법칙: Ki + Ui = Kf + Uf
(1/2)*m*(vi^2) + mg*(hi) = (1/2)*m*(vf^2) + mg*(hf)

* 탄성력: F = -kx (k: 용수철 상수)
* 용수철에의한 위치에너지: U = (1/2)*k*x^2

* 낙하운동(=등가속도 운동)의 속도공식
1. vf = -g * t + vi
2. vf^2 = vi^2 - 2g * y
3. y = vi * t -1/2 * g * t^2
4. y = 1/2(vi + vf)t
(vi: 초기속도, vf: 최종속도, g: 중력 가속도, y: 이동거리, t: 시간)

* 최대 정지 마찰력: fs = ns*N (ns: 정지마찰계수, N: 수직항력)
* 운동 마찰력: fk = nk*N (nk: 운동마찰계수, N: 수직항력)
* fs > fk 정지마찰계수는 운동마찰계수보다 크다.

 


Flash CS4+ActionScript 3.0으로 마우스 움직임에따라 삼각형의 모양이 변화하게 하고 삼각형의 높이와 각도값으로 대각선 길이 구하기 구현.

처음엔 선 무비클립 3개로 삼각형을 만들려고 하다가 실패를 거듭했었다. 결국 선 무비클립은 1개만 사용하여 각도를 재는데 사용하고 삼각형의 모양과 색은 graphics 클래스를 이용해 매 프레임 지우고 다시 그리는 것으로 처리해 성공했다. 다 만들고 나서 생각해 보니 원점만 지정해 주면 되고 선 무비클립도 필요 없을 듯.

Flash AS3 소스:
(화면에 미리 'lineMC'이란 이름의 선 무비클립과 angleTxt, xTxt, yTxt, diaTxt란 명칭의 Dynamic Text들을 만들어두었다.)

var line = lineMC;
var dx, dy, radian, widths, ang;
var xVal, yVal, diaVal;

function init(){	
	stage.addEventListener(Event.ENTER_FRAME,loop);
}
function loop(e:Event){
	line.rotation = rot2(line.x, line.y);
	line.width = wid2(line.x);
	
	xVal = mouseX - line.x; //x길이
	yVal = line.y - mouseY;	//y길이
	if(line.rotation < 0){ //각도 구하기
		ang = Math.abs(line.rotation);
	}else ang = 360 - Math.abs(line.rotation);
	//대각선 길이 구하기
	diaVal = yVal / Math.sin(ang * Math.PI/180);
	
	xTxt.text = String(xVal);//텍스트 표시
	yTxt.text = String(yVal);
	diaTxt.text = String(diaVal);
	angleTxt.text = String(ang);
	
	graphics.clear(); //그려진 줄 지우기
	graphics.lineStyle(1); //줄 그리기
	graphics.beginFill(0xf16b7b);//도형에 색 채우기
	graphics.moveTo(line.x, line.y);
	graphics.lineTo(mouseX, mouseY);
	graphics.lineTo(mouseX, line.y);
	graphics.lineTo(line.x, line.y);
	graphics.endFill();
}

function rot2(lix, liy){ //마우스 위치에따른 회전각도 반환
	dx = mouseX - lix;
	dy = mouseY - liy;
	radian = Math.atan2(dy,dx);
	return radian * 180/Math.PI;
}
function wid2(lix){ //마우스 위치에따른 길이 반환
	dx = mouseX - lix;
	return widths = Math.abs(dx);
}

init();