Computer Graphics Kyoungju Park kjpark@cau.ac.kr http://graphics.cau.ac.kr
Motion examples Topics Object orient programming Vectors and forces
Bounce motion Physical universe Mathematical universe 시간흐를때 X 위치 = x 위치 + x 속도, Y 위치 = y 위치 + y 속도 x 속도는일정 and x 위치가화면바깥이면속도방향전환 y 속도는일정 and y 위치가화면바깥이면속도방향전환 Representation universe
Moving on curves Physical universe Mathematical universe 시작위치가 (beginx, beginy), 마우스입력위치가 (endx, endy) 움직이는길이 y = x^2 을따른다고할때 파라메트릭방정식은 x = t, y = t^2 Representation universe 시간이흐를때 x = y = (distx, disty) 는 (endx, endy) (beginx, beginy)
Object Oriented Programming 객체의상태 : Variables 객체가할수있는일 : Functions Object-oriented programming the marriage of all of the programming fundamentals: data and functionality 예 ) Human Data, Human Function : human class 나 - object
Without an object 자동차가윈도우를가로지르며수평으로움직이고있는pseudo-code Data( 전역변수 ) 차색상, 위치 (x, y), x 속도 Setup 차색상, 위치, 속도초기화 Draw 배경채우기 자동차를위치와색상에따라디스플레이 자동차위치와색상을증가
Using an object OOP - 메인프로그램에서변수와함수를빼내서자동차 object 에저장 - 자동차 object 는데이터 - color, location, speed- 를알것임 -자동차object 는할수있는일 ( 방법-객체안의함수 ) 을알것임 - 자동차는 move 할수있고, display 할수있음 Data (Global Variables): 자동차 object. Setup: 자동차 object 초기화 Draw: 배경채우기 자동차 object display 자동차 object move
Object template = class
Class name Class Name: 이름은 class *** 명시 이름선언후에 { 와 } 괄호 괄호안에클래스를위한모든코드포함 이름은일반적으로대문자사용 Data: 변수의수집으로 instance variable 이라고부름 Object 의 instance 들이가지고있는변수임.
Constructor: 클래스내의특별한함수로서 object 의 instance 를생성 Object 를어디에서어떻게셋업하는지를명시 프로세싱의 setup() 함수와유사 이클래스로각객체를만들때사용됨 클래스와동일한이름을가지고있음 new 라는연산자를사용하여불러일으키면서부를수있음."Car mycar = new Car(); Functionality: Methods 를작성함으로써객체의 function 을추가할수있음 void setup() { } void draw() { } class Car { }
Using an object Step 1. object 변수를선언 int var; Car mycar; Step 2. object 를초기화 var = 10; mycar = new Car(); 객체를 constructor 인 new 를사용하여생성 Step 3. Using an object 객체안의함수를부르는것으로 dot 을사용 variablename.objectfunction bj ti mycar.draw(); mycar.display();
Constructor Arguments 두개의자동차객체를생성 Car mycar1 = new Car(); Car mycar2 = new Car(); Constructor method 안에 arguments 를놓음으로써자세한객체생성 빨간자동차는 (0,10) 위치에 1 속도로생성 파란자동차는 (0,100) 위치에 2 속도로생성 Car mycar = new Car(color(255, ( 0, 0), 0, 100, 2); Car(color tempc, float tempxpos, float tempypos, float tempxspeed){ C = tempc; Xpos = tempxpos; Ypos = tempypo니 Xspeed = tempxspeed; p }
Class 는데이터타입이다! OOP 하나의 Class 동일 class 에둘또는셋이상의 objects Class 는 integer 나 float 와같은데이터타입 References http://www.processing.org/learning/objects/
Vectors Points : 위치 Vectors : 두포인트사이의위치차이 화면을가로지르는사각형 Position: 객체의위치, points Velocity: 시간당객체의위치변화율, vectors Acceleration: 시간당객체의속도변화율, vectors 기하학적으로위치는 point 이고속도 / 가속도는 vector 임 특정원점을시작점으로가정할때, 위치는원점부터 point 까지의차이를나타내는벡터 velocity = velocity + acceleration location = location + velocity Draw things at location
Vectors Review 벡터에스칼라로곱셈 방향변화없이크기확장 ka = k a 벡터크기는피타고라스정리벡터기는피타라정리사용
Vector 연산 review 덧셈 한벡터의꼬리를다른벡터의시작에놓음 그때삼각형을완성하는벡터가덧셈합임 Vector 덧셈은교환가능:
a+b+c+d+e 를그리면?
Vector 연산 review 마이너스 (negative) 연산은 뺄셈은 b 벡터의끝부터 a 벡터의끝을연결하는벡터 (a, b 가같은원점일때 )
Vectors 덧셈 뺄셈 u = v + w u x = v x + w x, u y = v y + w y u = v - w u x = v x -w x, u y = v y w y 곱셈 v = w*n v x = w x *n, v y = w y *n v = w/n v x = w x /n, v y = w y /n
벡터크기 Vectors v = sqrt ( v x *v x + v y *v y ) 벡터 normalize : 크기를 1 로바꾸기 û = u / u
2D 벡터클래스 - PVector public class PVector { public float x; public float y; public float z; PVector(float x_, float y_, float z_) { x=x;y=y;z=z; x_; = y_; = z_; } PVector(float x_, float y_) { x = x_; y = y_; z = 0.0; } } /**functionality to go here -- see below**/ Constructor 가둘이상인경우를 overloaded 라고함 Argument 가둘일때 2D 벡터, Argument 가셋일때 3D 벡터
Pvector methods Instance methods PVector v1 = new PVector(0,1); Pvector v2 = new Pvector(1,0); v1.add(v2); Static methods PVector v1 = new PVector(0,1); PVector v2 = new PVector(1,0); PVector v3 = PVector.add(v1, v2);
Public, private Encapsulation 자동차를 object 로여길때, 자동차의내부구조는숨기고단지 car.drive() 와 car.turn() 만외부에서호출 사용자는객체의작동구조를알필요없음 객체의작동구조를변경하더라도같은 function 을사용자는계속사용 자동차객체호출자는차를해체할수없음
PVector http://www.processing.org/reference/pvector.html Methods set() : Sets the x,y,z componets of fthe vector get() : Gets the x,y,z components of the vector mag() : Calculate the magnitude (length) of the vector add() : Adds one vector to another sub() : Subtracts one vector from another mult() : Multiplies the vector by a scalar div() : Divides the vector by a scalar dist() : Calculates l the Euclidiean distance btw two points dot() : Calculates the dot product cross() : Calculates the cross product normalize() : Normalizes the vector limit() : Limits the magnitude of the vector anglebetween() : Calculates the angle btw two vectors array() : Return a representation of the vector as an array
Examples Hello motion Gravity anglebetween