bookmark_borderHTML 기본

HTML Tutorial

HTML TAG LIST

Html 기본 태그

링크삽입

<a href="https://www.w3schools.com/">Visit W3Schools.com!</a>

그림삽입

<img src="img_chania.jpg" alt="Flowers in Chania" width="460" height="345">

그림에 링크삽입

<a href="https://www.w3schools.com">
<img border="0" alt="W3Schools" src="logo_w3s.gif" width="100" height="100">
</a>

HTML 스타일

<body>
<h1 style="background-color:powderblue;">This is a heading</h1>
<p style="background-color:tomato;">This is a paragraph.</p>
</body>

텍스트 형식

<b>This text is bold</b>

<b> - Bold text
<strong> - Important text
<i> - Italic text
<em> - Emphasized text
<mark> - Marked text
<small> - Smaller text
<del> - Deleted text
<ins> - Inserted text
<sub> - Subscript text
<sup> - Superscript text

색상 변경

<h1 style="background-color:DodgerBlue;">Hello World</h1>
<p style="background-color:Tomato;">Lorem ipsum...</p>

리스트

&lt;p>Unordered HTML List&lt;/p>
&lt;ul>
  &lt;li>Coffee&lt;/li>
  &lt;li>Tea&lt;/li>
  &lt;li>Milk&lt;/li>
&lt;/ul>

&lt;p>Ordered HTML List&lt;/p>
&lt;ol>
  &lt;li>Coffee&lt;/li>
  &lt;li>Tea&lt;/li>
  &lt;li>Milk&lt;/li>
&lt;/ol>

Table, Iframe, Layer 만들기

<table> 태그로 테이블 만들기

<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
</table>

<iframe> 태그로 프레임 만들기

<iframe src="demo_iframe.htm" style="height:200px;width:300px;" title="Iframe Example"></iframe>

<div>태그로 레이어 만들기

&lt;style>
.myDiv {
  border: 5px outset red;
  background-color: lightblue;    
  text-align: center;
}
&lt;/style>
...
&lt;div class="myDiv">
  &lt;h2>This is a heading in a div element&lt;/h2>
  &lt;p>This is some text in a div element.&lt;/p>
&lt;/div>
...

Html Layout

  • <header> – Defines a header for a document or a section
  • <nav> – Defines a set of navigation links
  • <section> – Defines a section in a document
  • <article> – Defines an independent, self-contained content
  • <aside> – Defines content aside from the content (like a sidebar)
  • <footer> – Defines a footer for a document or a section
  • <details> – Defines additional details that the user can open and close on demand
  • <summary> – Defines a heading for the <details> element

Form 태그 설문양식 만들기

Form 태그

<form action="/action_page.php">
  <label for="fname">First name:</label><br>
  <input type="text" id="fname" name="fname" value="John"><br>
  <label for="lname">Last name:</label><br>
  <input type="text" id="lname" name="lname" value="Doe"><br><br>
  <input type="submit" value="Submit">
</form> 

Form 기본 태그

<input> : 값의 입력 및 제출

<form>
  <label for="username">Username:</label><br>
  <input type="text" id="username" name="username"><br>
  <label for="pwd">Password:</label><br>
  <input type="password" id="pwd" name="pwd">
  <input type="submit" value="Submit">
</form>

<input type="button">
<input type="checkbox">
<input type="color">
<input type="date">
<input type="datetime-local">
<input type="email">
<input type="file">
<input type="hidden">
<input type="image">
<input type="month">
<input type="number">
<input type="password">
<input type="radio">
<input type="range">
<input type="reset">
<input type="search">
<input type="submit">
<input type="tel">
<input type="text">
<input type="time">
<input type="url">
<input type="week">

<select> : 콤보박스 선택

<label for="cars">Choose a car:</label>

<select name="cars" id="cars">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

<textarea> : 메모(여러줄) 입력

<textarea id="w3review" name="w3review" rows="4" cols="50">
At w3schools.com you will learn how to make a website. They offer free tutorials in all web development technologies.
</textarea>

<button> : 버튼

<button onclick="myFunction()">Copy Text</button>

<script>
function myFunction() {
  document.getElementById("field2").value = document.getElementById("field1").value;
}
</script>

HTML5에 추가된 form 태그와 속성

<input type="color">
<input type="file">
<input type="number" min="1" max="5">

설문조사 페이지 실습

<!DOCTYPE html>
<html> <body>
    <h2>설문조사</h2>
    <form>
        이름 : <input type="text"><br>
        비밀번호 : <input type="password"><br>
        학년을 선택하세요<br>
        <div>
            <input type="radio">1학년<br>
            <input type="radio">2학년<br>
            <input type="radio">3학년<br>
            <input type="radio">4학년<br>
        </div>
        <br>
        담당자에게 하고 싶은 말을 쓰세요.<br>
        <textarea></textarea>
        <input type="submit">
        <input type="reset">
    </form>
</body> </html>

멀티미디어와 이미지맵

HTTPD설치와 웹 게시

  • Httpd (hypertext transfer protocol daemon)
    HTTP 서비스 제공 데몬 서버
    포트 : 80
    서버 패키지 : apache
    서버에서 웹 페이지 전송 서비스를 제공해주는 서버 프로그램
  • Httpd 설치 및 권한설정
  • Html문서를 웹에 게시

bookmark_borderHTML5

  • HTML
    – HyperText Markup Language
    – 웹페이지 기술을 위한 마크업 언어
    – 웹페이지의 내용과 구조를 담당
  • HTML5 지원 기능
    – 멀티미디어: 플러그인 없이 비디오, 오디오 자체적 지원
    – 그래픽: 3차원 그래픽 지원
    – 통신: 단방향 통신 -> 서버와의 양방향 통신
    – 디바이스 접근: 카메라, 센서 등 제어 가능
    – 오프라인 및 저장소: 오프라인에서도 동작 가능
  • HTML5 기본구조
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Hello Word</title>
	</head>
	<body>
		<h1>Hello World</h1>
		<p>안녕하세요! HTML5</p>
	</body>
</html>
  • <head> 태그 사이
    – 메타데이터 , 문서 이름을 입력
    – meta 태그
    : 사용자에게는 나타나지 않음
    : <meta charset=“utf-8”> : 한글 사용
  • <body> 태그 사이는 웹 브라우저 출력
  • Visual Studio Code 설치 및 디버깅

HTML 학습

bookmark_border웹 개발환경

  • AWS : 아마존 웹서비스
    – aws.amazon.com
    – EC2
    : 클라우드 가상서버
    : Amazon Elastic Compute Cloud
  • Putty
    – SSH(Secure Shell) 를 통한 command line 으로 서버 프로그램 제어
  • WinSCP
    – FTP(File Transfer Protocol) 를 통한 서버에 파일 전송
    – 서버의 파일을 직접 편집 가능
  • vi 에디터
    – 입력모드(input mode)
    – 명령모드(command mode) -> vi 시작 시 기본모드
    – 라스트 라인모드(last-line mode 혹은 EX mode)

    – 내용 삽입
    a : 커서 바로 다음부터 입력
    A : 현재 행 끝부터 입력
    i : 커서 바로 앞부터 입력
    o : 커서 다음에 새로운 행이 추가되면서 입력

    – 내용 삭제
    x : 현재 커서 위치의 한 문자가 삭제
    dw : 현재 커서 위치의 한 단어가 삭제
    dd : 현재 커서 위치의 한 행이 삭제
    D : 현재 커서부터 그 행의 마지막까지 삭제

    – 단어나 문자 찾기
    /little : 첫 little 단어를 파일 아래로 내려가면서 찾음
    ?little : 첫 little 단어를 파일 위로 올라가면서 찾음
    n : 이전의 찾기 명령을 동일 방향으로 실행
    N : 이전의 찾기 명령을 반대 방향으로 실행

    – 종료하기
    wq [ filename ] : 저장하고 종료 (vi 시작 시 filename 이 없었다면 반드시 지정)
    :q! : 저장하지 않고 무조건 종료
    :w : 지금까지 작업 내용 저장 (종료 않음)
    :w [ filename ] : 지정한 이름으로 저장 (종료 않음)
  • Unix Shell
    – 유닉스 쉘 (Unix Shell) = 명령줄
    – 유닉스 운영 체제와 유닉스 계통 시스템을 위한 사용자 인터페이스 제공
    – 문자열 입력으로 쉘 실행
  • UNIX 기본 명령어
    $ ls -al : 파일 목록 보기
    $ cd 디렉토리명 : 디렉토리 이동, ( change directory )
    $ cd .. : 하위 디렉토리 이동
    $ mkdir 디렉토리명 : 디렉토리 생성
    $ rm 파일명 : 파일 삭제
    $ rm -r 디렉터리명 : 디렉토리 안의 파일 및 디렉토리 삭제. recursive
    $ rm -i 파일명 : 한번 묻고 삭제. (질문없이 삭제하면 복구불가하므로 주의 요망)
    $ mv 파일명1 파일명2 : 파일명 변경, move
    $ mv 파일명 디렉터리명 : 파일을 디렉토리로 이동, move
    $ cp [옵션] FILE1 FILE2 : FILE1을 FILE2로 복사, overwrite 주의, -i : overwrite 의 방지

bookmark_border인터넷과 웹앱

  • 인터넷 (inter + network)
  • 프로토콜 (protocol)
    – 컴퓨터나 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙 체계
  • 패킷 (Packet) 전송
    – 큰 용량의 정보를 작은 단위의 패킷으로 나누어 전송하는 방법
  • TCP/IP
    – TCP (Transmission Control Protocol) : 송신자와 수신자 사이의 전송 단계에서 패킷의 주소와 내용을 담당하는 프로토콜
    – IP (Internet Protocol) : 패킷을 목적지까지 보내는 규칙을 정의한 프로토콜
  • 웹(web)
    – World Wide Web (WWW) 의 줄임말
    – 웹의 창시자 : 팀 버너스리
    – 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간
    – 메일, 정보검색, 교육, 인트라넷 등으로 활용
    – Web 을 위한 프로토콜 : HTTP
  • DNS: Domain Name System
    – 사용자가 알기 쉬운 도메인을 컴퓨터가 알기 쉬운 ip주소로 변환하는 역할
  • 웹 접속 과정
  • 웹의 동작
    – 웹 브라우저를 통해 웹 서버에 접속하여 정보 획득 가능
    – 웹 접속과 실행을 위해 프론트 엔드와 백 엔드의 역할이 필요

  • 프론트 엔드
    – 빙하의 노출된 부분
    – 웹의 외관적으로 보이는 부분을 담당
  • 백 엔드
    – 빙하의 숨겨진 부분
    – 웹의 데이터 베이스 관리, 서버 연동 등의 외관적으로 보이지 않는 부분을 담당
  • 프론트 엔드와 백 엔드

    HTML : 웹 페이지의 기본 구조 담당
    CSS : 웹의 스타일을 담당
    JavaScript : 웹 페이지의 동작 담당
    Jquery, nodeJS : 자바스크립트의 기능을 활용
    Cordova : 하이브리드 앱 개발
  • 웹앱
    – 웹 브라우저를 통해서 실행되는 응용 프로그램을 총칭
    – Hosted App: 온라인 상태에서 URL 접속을 통해서 실행되는 웹앱
    – Packaged App: 실행에 필요한 모든 웹 문서와 파일들을 하나의 ZIP 파일로 압축하여 제공하는 웹앱
  • 네이티브 앱(Native App)
    – 각각의 스마트폰 OS 환경에 따라 제작된 앱
  • 모바일 웹(Mobile Web)
    – 웹 어플리케이션을 모바일 스크린 크기로 축소해 놓은 것
    – 일반적인 웹 기술로 개발되고 모바일 브라우저에서 실행됨
  • 모바일 웹앱(Mobile WebApp)
    – 모바일 웹보다 모바일에 더 최적화되고 네이티브 앱화됨
    – 단일 페이지 모델을 사용하여 화면을 전환
    – 모바일 웹보다 실행 속도가 빠름
  • 하이브리드 앱(Hybrid App)
    – 네이티브 앱과 웹 앱의 장점을 가지고 단점을 보완한 앱
    – 외부 형태는 네이티브 앱이지만, 실제 내부는 모바일 웹앱으로 실행
    – 예시: 은행 어플리케이션

bookmark_border04. 축구공의 움직임

축구공이 받는 힘

중력

  • (계산한) 지구표면의 중력의 힘 : 9.8 m/s2

g = -9.8 #m/s**2

# Gravity Force
grav = ball.m * vec(0,g,0) #gravity

공기저항력

  • 공기에 의한 저항
    – 물체가 기체 분자와 부딪히면서 (물체의 운동방향)속도 반대 방향으로 작용



축구공이 받는 힘

프리킥 시뮬레이션

프리킥 코드 06-01

GlowScript 2.9 VPython

# ground 운동장
ground = box(pos=vec(0,0,0),size=vec(100,0.10,70), color = color.green)

# init. positon & velocity of ball
init_pos = vec(-30,0.11,0)
ball = sphere(pos=init_pos,radius=0.11, color = color.orange) # m
ball.m = 0.45    # kg
ball.speed = 25  # m/s
ball.angle = radians(35)   # c.f) degrees 각도, 35도, 라디안으로 변환
ball.v = ball.speed*vec(cos(ball.angle),sin(ball.angle),0)
attach_trail(ball)
attach_arrow(ball, "v", shaftwidth = 0.1, scale = 0.3, color=color.yellow) # scale : 크기를 30%로 줄여서

# graph
gball_x = gcurve()
scene.range = 30 # x축 간격으로 약 30정도 세팅. 한눈에 들어오게

# const.
g = -9.8     # 중력가속도 m/s**2
rho = 1.204  # 공기의밀도 kg/m**3
Cd = 0.3     # laminar 저항계수

#time setting
t = 0
dt = 0.01

while t < 20:
    rate(1/dt)
    
    # Gravity Force
    grav = ball.m * vec(0,g,0)
    
    # Drag Force
    drag = -0.5*rho*Cd*(pi*ball.radius**2)*mag(ball.v)**2*norm(ball.v)
    print("gravity: ", mag(grav), 'drag force: ',mag(drag))
    
    # Sum of Forces
    ball.f = grav + drag
    
    # Time stepping
    ball.v = ball.v + ball.f/ball.m*dt
    ball.pos = ball.pos + ball.v*dt
    
    # graph
    gball_x.plot(pos=(t,mag(init_pos - ball.pos)))
    
    # collision
    if ball.pos.y - ball.radius < 0:
        #print(ball.pos.x)
        break
    t = t + dt
공기저항력없는 프리킥 코드 06-02

    # Sum of Forces
    ball.f = grav + drag
    ball2.f = grav
바람이 불때 프리킥 코드 06-03



# wind
wind_speed = 5    # m/s
#wind_speed = -5  # m/s
#wind_speed = -10 # m/s
wind_v = wind_speed*vec(1,0,0)

# Drag Force
ball.v_w = ball.v - wind_v
drag_wind = -0.5*rho*Cd*(pi*ball.radius**2)*mag(ball.v_w)**2*norm(ball.v_w)
    
# Sum of Forces
ball.f = grav + drag_wind

마그누스 효과

  • 공에 회전
    – 회전하는 방향으로 공이 휨
    – 마그누스 힘, 마그누스 효과
    – 물체주변의 공기 + 물체 회전
    – 진공에서는 휘지 않음.
    – 물체와 기체분자와의 상호작용

    – 기체분자가 축구공에 미치는 알짜힘 ->위쪽 방향으로의 힘.









바나나킥 시뮬레이션 08-01

Cm = 1       # 저항계수
w = 10*2*pi  # 10 rev. per sec 초당 10회전

# Magnus Force
magnus = 0.5*rho*Cm*(pi*ball.radius**2)*ball.radius*w*mag(ball.v)*cross(vec(0,1,0),norm(ball.v))

# Sum of Forces
ball.f = grav + drag + magnus
바나나킥 시뮬레이션 (슬라이더 UI) 08-02

## UI
scene.append_to_caption(' \nInitial Values \n \n')

# slider
velocitySlider = slider(min = 0, max = 45, value = 25, bind = setVelocity)
scene.append_to_caption(' \nVelocity:',velocitySlider.min, 'to' ,velocitySlider.max, '\n \n')

def setVelocity():
    global ball
    ball.speed = velocitySlider.value
    ball.v = ball.speed*vec(cos(ball.angle),sin(ball.angle),0)

bookmark_border03. 만유인력과 천제의 운동

만유인력의 법칙

  • 질량을 가지 두 물체는 인력이 작용
    – 물체 질량의 곱에 비례
    – 거리 제곱에 반비례
  • 중력 (Gravity)
  • 중력 (나무위키)



    \huge{ F = G \frac{m1 m2}{d^2}  }

  • G는 중력상수(실험적으로 측정) = 6.674×10-11 N m2/kg2
  • 지구표면의 중력 = 9.8 m/s2
    – 사과(질량) 0.1kg 이 갖는 힘은 ?
    F = ma
    F = mg
    F = 0.1 kg × 9.8 m/s2
    F = 0.98 kg m/s2
    F = 0.98 N
    => 약 1 뉴튼(N)

지구와 달

GlowScript 2.9 VPython

# 지구 : 반지름 6,400,000m, 6,400km
Earth = sphere(pos = vector(0,0,0), radius = 6400000, texture = textures.earth)

# 달 : 지구와 거리 385,000,000m 385,000km, 반지름 1,737,000m 1,737km
Moon = sphere(pos = vector(385000e3,0,0), radius = 1737000, make_trail = True)

sf = 6 #scailing factor
Earth.radius = sf*Earth.radius
Moon.radius = sf*Moon.radius

# 중력상수, 만유인력상수, 뉴턴상수: 6.674×10-11 N m2/kg2
G = 6.67e-11

# 지구 질량
Earth.mass = 5.972e24

# 달 질량
Moon.mass = 7.347e22

Earth.v = vec(0,0,0)
Moon.v = vec(0,0,0)

# time
t = 0
dt = 60

# Simulation Loop
while True:
    rate(1000)    

    # Forces
    r = Earth.pos - Moon.pos
    Moon.f = G * Earth.mass * Moon.mass / mag(r) ** 2 * norm(r)
    Earth.f = -Moon.f 

    # Time Integration
    Moon.v = Moon.v + Moon.f/Moon.mass*dt
    Earth.v = Earth.v + Earth.f/Earth.mass*dt

    Moon.pos = Moon.pos + Moon.v*dt
    Earth.pos = Earth.pos + Earth.v*dt

    t = t + dt    

    # Collision Check
    if Earth.radius + Moon.radius > mag(r):
        print("Collision!")
        print(t/60/60/24, "days")
        break

달의 공전

  • 달의 공전속도 =  1,022km/s
    – Moon.v = vec(0, 1022, 0)
  • 코드 05-01
    – 만유인력에 의해 (서로 끌어당겨) 점점 위로 올라감
    – 지구의 초기속도를 달의 초기속도 반대 방향으로 설정
    – 지구의 초기속도 = 달의 속도 x 달의 질량 / 지구의 질량
    Earth.v = -Moon.v * Moon.mass / Earth.mass
    -> 운동량 보존의 법칙 : 지구와 달을 하나의 시스템을 보았을때 운동량을 0으로 만드는 방법 (이렇게 하면 질량 중심의 위치가 변하지 않음)
  • 코드 05-02
  • 공전속도를 반으로 해보면…
    – Moon.v = 0.5*Moon.v
    – 지구와 가까워졌을때 빨라짐 => 케플러 법칙에 정확히 부합
  • 달의 공전속도를 1.2배로 해보면?
    – Moon.v = 1.2*Moon.v
    – 1.5배로 하면 멀리 가버림. 지구 중력이 달을 끌어당기지 못함. => 탈출속력
    – 탈출속력 : 지구의 중력을 이기고 탈출할 정도의 속력

3체운동

  • 세 물체가 받는 만유인력을 다 계산
  • 코드 5-04
    – 위성 위치를 중심에
    – 질량은 지구질량의 1/10 : sat.m = 1/10*earth.m
    – 지구와 달의 질량이 같으면 평형 운동
  • 코드 05-04-1 : 위성의 위치를 아주 약간 지구쪽으로 이동 : vector(-0.01*r,0,0)
  • 코드 05-04-2 : 더 작게 이동 : vector(-0.001*r,0,0)
  • 수학적 계산으로는 예측할 수 없고 컴퓨터 계산으로 근사적인 형태만 알 수 있음.

탐사선을 달로

  • 탐사선 질량 15,000 kg
  • 지구 반지름에서 10배 떨어진 곳에서 출발
  • 연료 없이 지구와 달의 인력으로만 이동
#craft
craft = sphere(pos=vec(-10*Earth.radius, 0,0), radius=1e6, color=color.yellow, make_trail=True)
craft.m = 15e3
  • 코드 05-05
    – 초속 2km 속도 : craft.v = vec(0,2e3,0) # initial vel without moon
    – 지구를 못 벗어남.
  • 코드 05-05-1
    – 초속 3.5km : craft.v = vec(0,3.5e3,0) # hyperbolic
    – 멀리 가버림.
  • 코드 05-05-2
    – #craft.v = vec(0,3.3e3,0) : 달의 뒷면 탐사
    – #craft.v = vec(0,3.27e3,0) #critical pt : 달의 앞면 탐사.
    – 물고기 모양 괘도

시뮬레이션

  • 수학적 일반해를 가지지 못하는 3체운동의 움직임을 확신할 수 있는 이유?
    – 시간 간격을 줄여 시뮬레이션을 진행해도 퀘도가 크게 달라지지 않음을 확인
    – 시뮬레이션을 통해 근사해를 구함

bookmark_border02.뉴턴의 운동법칙

뉴턴의 운동법칙

  • 제 1법칙 : 관성의 법칙
  • 제 2법칙 : 가속도의 법칙 : F = ma : 힘 = 질량 x 가속도
  • 제 3법칙 : 작용-반작용의 법칙

제 1 법칙 관성의 법칙

  • 물체에 힘이 가해지지 않으면 정지하거나 등속 직선 운동을 한다.
  • 속도
    – 일정 시간동안 물체의 위치가 변한 정도
    – 위치의 변화, 변위를 나타내는 물리량
    – 벡터 형태로 표현
    Speed and Velocity
    속력과 속도
    – 속력 speed = \frac {{\varDelta}s} {{\varDelta}t} = \frac{Distance}{Time} =  \frac{50 km}{1 hour} : 스칼라
    – 속도(Velocity) 는 방향이 있는 속력 : 벡터
GlowScript 2.9 VPython

# creating ball
ball = sphere(radius = 0.2)

# Initial Setting
ball.pos = vec(-2,0,0) ## m
ball.v = vec(0.8,0,0)  ## m/s 초속 0.8미터

t = 0  ## s
dt = 1 ## s 1초

attach_arrow(ball, "v", shaftwidth=0.1, color=color.green)

scene.waitfor('click')
ball.pos = ball.pos + ball.v*dt #r1 ‐> r2
t = t + dt

scene.waitfor('click')
ball.pos = ball.pos + ball.v*dt #r2 ‐> r3
t = t + dt
dt = 0.01
while t < 4:
    rate(1/dt)
    ball.pos = ball.pos + ball.v*dt
    t = t + dt

rate : 초당 몇번 이 구문을 실행하게 할것인가?
rate(1/dt) : 실시간, 시간간격을 dt로 잡았다면 1/dt 는 실시간, dt가 1초면 1초마다, 0.01초면 0.01초마다.
rate(100) : 초당 while 루프 안을 100 번 수행(화면을 변경)하겠다는 의미

제 2 법칙 가속도의 법칙

  • \color{blue} F = ma
    • 힘 = 질량 X 가속도

    • 힘이 클수록 더 많은 가속도
    • 질량이 클수록 더 적은 가속도
    • 힘이 변하지 않을때, 가속도는 일정 : 등가속도운동
    • 하나의 물체에 여러힘이 작용할때는 벡터의 합으로 알짜 힘을 구함
  • 가속도 (Acceleration)
    – 속도가 변하는 정도 : 일정 시간 동안 물체의 속도가 변한 정도



    가속도 = 속도가 변한 정도 / 일정 시간 = {\frac {4 m/s} {2 s}} = 2 m/s2
가속도 예제 03-01

GlowScript 2.9 VPython

#creating ball
ball = sphere(radius = 0.2)

#Initial Setting
ball.pos = vec(-2,0,0) ## m
ball.v = vec(0,0,0) ## m/s
ball.a = vec(0.35,0,0) ## m/s**2, 가속도

t = 0 ## s
dt = 1 ## s

attach_arrow(ball, "v", shaftwidth=0.1, color=color.green)
attach_arrow(ball, "a", shaftwidth=0.05, color=color.red)
attach_trail(ball, type = 'points', pps = 5)

while t < 4:
    rate(1/dt)
    ball.v = ball.v + ball.a*dt
    ball.pos = ball.pos + ball.v*dt #r1 ‐> r2
    t = t + dt

포물체의 움직임

  • 중력을 받는 상황에서 움직일때, 포물선을 그리며 움직임
  • 중력이 일정하다는 가정하에 등가속 운동 
  • 가속도가 수직 아래 방향 -> 가속도의 방향이 -y 방향
포물체의 움직임 예제 03-02

GlowScript 2.9 VPython

#creating ball
ball = sphere(radius = 0.2)
ground = box(pos = vec(0, -4, 0), size = vec(15, 0.01, 15))

#Initial Setting
ball.pos = vec(-2,0,0) ## m
ball.v = vec(1,1,0)    ## m/s
ball.a = vec(0,-0.3,0) ## 가속도

t = 0 ## s
dt = 0.01 ## s

attach_arrow(ball, "v", shaftwidth=0.1, color=color.green)
attach_arrow(ball, "a", shaftwidth=0.05, color=color.red)
attach_trail(ball, type = 'points', pps = 5)

motion_graph = graph(title = 'position-time', xtitle = 't', ytitle = 'y')
g_bally = gcurve()

motion_graph2 = graph(title = 'velocity-time', xtitle = 't', ytitle = 'vy')
g_ballvy = gcurve(color=color.green)

while ball.pos.y > ground.pos.y:
    rate(1/dt)    
    ball.v = ball.v + ball.a*dt
    ball.pos = ball.pos + ball.v*dt
    g_bally.plot(pos=(t, ball.pos.y))
    g_ballvy.plot(pos=(t, ball.v.y))
    t = t + dt
attach_trail(ball, type = 'points', pps = 5)
  - 객체의 자취를 그려주는 함수
  - ball : 자취를 그릴 객체
  - type : 자취의 type 설정
  - pps : 점을 몇초마다 그릴 것인지

motion_graph = graph(title = 'position-time', xtitle = 't', ytitle = 'y')
  - 그래프 생성 함수
  - title : 그래프 이름 설정
  - xtitle : x축 이름 설정
  - ytitle : y축 이름 설정

g_bally = gcurve()
  - 그래프의 데이터를 그리는 함수

g_bally.plot(pos(t, ball.pos.y))
  - 그래프에 새 데이터를 추가해 그리는 함수
포물체의 움직임 예제 03-03

GlowScript 2.9 VPython

rList = list()
objList = list()

#Creating Objects
ground = box(pos = vec(0, -5, 0), size = vec(15, 0.01, 15))

for i in range(0, 100):
    rList.append(vec(0, -4, 0))

for r in rList:
    objList.append(sphere(pos = r, radius = 0.1, color = vec(random(), random(), random()), make_trail=True, retain = 30))

#Intitial Condition
vi = vec(0, 5.0, 0)
a = vec(0, -3, 0)
explosion = False

for obj in objList:
    obj.v = vi

#time Setting
t = 0
dt = 0.01

#Simulation Loop

while t < 12:
    rate(1/dt)
    
    #Explosion
    if t > 1 and explosion == False:
        print("explosion!")
        for obj in objList:
            obj.v = obj.v + vec(random()-0.5, random()-0.5, random()-0.5)
        explosion = True
    
    #Velocity and Position Update
    for obj in objList:
        obj.v = obj.v + a*dt
        obj.pos = obj.pos + obj.v*dt

        #Coliision Handling
        if obj.pos.y < ground.pos.y:
            obj.pos.y = ground.pos.y
            obj.v.y = -0.8 * obj.v.y
            obj.color = vec(random(), random(), random())
    t = t+dt
mag(r)
- 벡터 r의 크기(길이)를 계산해서 반환하는 함수

norm(r)
- 벡터 r의 단위 벡터를 계산해서 반환하는 함수

제 3 법칙 작용 반작용의 법칙

  • 어떠한 물체에 힘이 작용하면 물체에 힘이 작용하는 동시에, 항상 크기가 같고 방향이 반대인 힘이 작용함

bookmark_border01. 3차원 물체와 벡터 표현

1. VPython(Glowscript)을 이용한 3차원 물체 표현

좌표계

HelloPhysics

GlowScript 2.9 VPython

#Creating Ball
myBall = sphere(color=color.red, radius=2)

#Creating Box
myBox = box(pos = vec(5,0,0), color = color.blue, size = vec(0.5,4,1))
myBall.color = color.green
myBox.pos.x = 10

2. VPython(Glowscript)을 이용한 벡터 연산

벡터(Vector)

  • 벡터는 크기(magnitude)와 방향(direction)을 갖는다.


    선의 길이는 크기를 나타내고 화살표는 방향을 나타낸다.
  • 두 벡터는 더할 수 있다.
  • 두 벡터를 뺄 수도 있다.

  • 벡터의 표기법 : 굵은 a

  • 벡터 a는 두개의 벡터 axay 로 나눌 수 있다.


    a = (ax, ay)
  • 벡터 더하기 예제


    a = (8, 13) , b = (26, 7)
    c = a + b
    c = (8, 13) + (26, 7) = (8+26, 13+7) = (34, 20)
  • 벡터 빼기 예제
    v = (12, 2) , k = (4, 5)
    a = v + −k
    a = (12, 2) + −(4, 5) = (12, 2) + (−4, −5) = (12−4, 2−5) = (8, −3)
  • 벡터의 크기 표기법
    |a|
    또는, 절대값과 혼돈되지 않도록 ||a||
  • 벡터의 크기 계산
    피타고라스의 정리
    |a| = √( x2 + y2 )

    벡터 b의 크기는 ?
    b = (6, 8)
    |b| = √( 62 + 82) = √( 36+64) = √100 = 10

    스칼라 : 크기만 표기
스칼라값 계산 예제

GlowScript 3.0 VPython

# Vectors
r= vector(6,8,0)

# 벡터의 크기 : 스칼라값
mag_val = sqrt(6**2 + 8**2)
print("Magnitude:", mag_val) 

r_mag = mag(r)
print("mag(r):", r_mag)
  • 단위벡터
    Unit Vector
    크기가 1인 벡터
    표기법 : a “hat
    스케일링 : 단위벡터의 2.5배
벡터의 크기와 방향

GlowScript 2.9 VPython

#Vectors
r= vector(3,4,5)
r_arrow = arrow(pos = vector(0,0,0), axis=r, shafrwidth=0.2)

#Axes (사물의) (중심) 축, 축선
x_axis = arrow(axis=vector(10,0,0), color=color.red, shaftwidth=0.1)
y_axis = arrow(axis=vector(0,10,0), color=color.green, shaftwidth=0.1)
z_axis = arrow(axis=vector(0,0,10), color=color.blue, shaftwidth=0.1)

r_mag = mag(r)    // 벡터의 크기 : 스칼라값
r_hat = norm(r)   // 벡터의 방향 : 단위벡터
r_hat_arrow = arrow(axis=r_hat, color=color.cyan, shaftwidth=0.2)

print("r:", r)
print("r_mag:", r_mag)
print("r_hat:", r_hat)
mag(r)
- 벡터 r의 크기(길이)를 계산해서 반환하는 함수

norm(r)
- 벡터 r의 단위 벡터를 계산해서 반환하는 함수
벡터 연산

GlowScript 3.0 VPython

a = vector(3,4,0)
b = vector(5,1,0)

# 벡터더하기
c = a + b

# 벡터빼기
d = a - b

# 벡터의내적
e = dot(a,b)

deg = acos(e/mag(a)/mag(b)) ## rad
deg = degrees(deg) ## deg
a_arrow = arrow(pos=vector(0,0,0), axis=a, shaftwidth=0.2,color=color.blue)
b_arrow = arrow(pos=vector(0,0,0), axis=b, shaftwidth=0.2,color=color.green)
#c_arrow = arrow(pos=vector(0,0,0), axis=c, shaftwidth=0.2,color=color.red)
d_arrow = arrow(pos=b, axis=d, shaftwidth=0.2,color=color.red)

print("a+b=", c)
print("a-b=", d)
print("dot(a,b) =", e)
print("degree(a,b) =", deg)
  • 두 벡터 곱하기

    벡터의 내적 : Dot Product : 결과값 스칼라
    벡터의 외적 : Cross Product : 결과값 벡터
벡터내적 : Dot Product

GlowScript 2.9 VPython

#Vectors
v = vector(3,4,0)
r = vector(1,0,0)
v_par = dot(v,r)*r
v_per = v - v_par
v_arr = arrow(axis=v, shaftwidth=0.2)
r_arr = arrow(axis=r, shaftwidth=-0.3, color=color.blue)
v_par_arr = arrow(axis=v_par, shaftwidth=0.2, color= color.green)
v_per_arr = arrow(axis=v_per, shaftwidth=0.2, color= color.yellow)

print("v=", v)
print("r=", r)
print("dot(v,r)=", dot(v,r))
print("v_par=", v_par)
print("v_per=", v_per)
벡터의 외적 : Cross Product

GlowScript 2.9 VPython

#Vectors
a = vector(1,2,3)
b = vector(-1,2,0)
c = cross(a,b)

a_arr = arrow(axis=a, shaftwidth=0.1, color=color.red)
b_arr = arrow(axis=b, shaftwidth=0.1, color=color.blue)
c_arr = arrow(axis=c, shaftwidth=0.1)

d = cross(b,a)
d_arr = arrow(axis=d, shaftwidth=0.1, color=color.yellow)