메뉴 건너뛰기

본문시작

스크립트 연구
2010.12.01 23:57

[COFFEE] 선형 진동 오브젝트 구현

조회 수 322 추천 수 0 댓글 4
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
Extra Form
LinearVibration_Sphere.c4d
COFFEE로 구현한 오브젝트의 선형 진동입니다.

파라미터 값들은 물리학을 기반으로 한 것이며, 따라서 COFFEE 코드도 물리학 법칙을 따라 구현되었습니다.

자세한 내용은 좀 복잡할 수도 있어서 일단 생략하고, 주말에 구현한 원리에 대한 파일을 첨부토록 하겠습니다. ^^

일단 구현된 코드는 다음과 같습니다. 제가 짠 것인데도 제가 보니 주석도 없고 엉망인 것 같습니다. 궁금하신 분은 향후 첨부될 파일을 참고 하시면 되겠습니다. ㅎㅎ

// @ Authror: Geol Choi

// @ Date: Dec.1, 2010

// @ mail to: gchoi@etri.re.kr

class Complex {

                  public:

                                                                                        var var1,var2,var3, Re, Im;

                                                                                        Multiply(var1,var2);

                                                                                        Divide(var1,var2);

                                                                                        Real(var1);

                                                                                        Imaginary(var1);

                                                                                        Conjugate(var1);

                                                                                        RealToComplex(var1);

}

 

Complex::Multiply(v1,v2)

{

                  var3 = vector(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v2.x*v1.y, 0);

                  return var3;

}

 

Complex::Divide(v1,v2)

{

                  var denominator = pow(v2.x,2) + pow(v2.y,2);

                  var3 = vector((v1.x*v2.x + v1.y*v2.y)/denominator, (-v1.x*v2.y + v2.x*v1.y)/denominator, 0);

                  return var3;

}

 

Complex::Real(v1)

{

                  Re = v1.x;

                  return Re;

}

 

Complex::Imaginary(v1)

{

                  Im = v1.y;

                  return Im;

}

 

Complex::Conjugate(v1)

{

                  v1.y = -v1.y;

                  return v1;

}

 

Complex::RealToComplex(v1)

{

                  if(typeof(v1)!=2)

                  {

                                   return null;

                  }

                  return vector(v1,0,0);

}

 

main(doc,op)

{

                  // Step 1

                  var obj = op->GetDown();

                  var frame = doc->GetTime()->GetFrame(doc->GetFps());

                  frame = frame/doc->GetFps();

                  var i,j,pos;

                  var m = op#ID_USERDATA:1; // spring mass

                  var c = op#ID_USERDATA:2; // damping coefficient

                  var k = op#ID_USERDATA:3; // spring coefficient

                  var x0 = op#ID_USERDATA:4; // initial displacement

                  var f1 = op#ID_USERDATA:5; // sine harmonic force

                  var f2 = op#ID_USERDATA:6; // cosine harmonic force

                  var w = op#ID_USERDATA:7; // harmonic frequency

                  var v0 = op#ID_USERDATA:8; // initial velocity

                  // For complex numbers

                  var cM = vector(m,0,0);

                  var cC = vector(c,0,0);

                  var cK = vector(k,0,0);

                  var cX0 = vector(x0,0,0);

                  var cF1 = vector(f1,0,0);

                  var cF2 = vector(f2,0,0);

                  var cW = vector(w,0,0);

                  var cV0 = vector(v0,0,0);

 

                  // Step 2

                  var a = new(Complex);

                  var var1 = vector(f1,f2,0);

                  var var2 = vector(k-m*pow(w,2),c*w,0);

                  var var3 = a->Divide(var1,var2);

                  var Re = a->Real(var3);

                  var Im = a->Imaginary(var3);

                  var cA = var3;

 

                  var tmp = pow(c,2) - 4.0*m*k;

                  var r = vector(0,0,0);

                  if(tmp >= 0)

                  {

                                   r = vector(sqrt(tmp), 0, 0);

                  }

                  else

                  {

                                   r = vector(0, sqrt(-tmp), 0);

                  }

                  var s1 = (-cC+r)/(2.0*m);

                  var s2 = (-cC-r)/(2.0*m);

 

                  // Step 3

                  var X0 = Re;

                  var V0 = a->Imaginary(a->Multiply(var3,vector(0,w,0)));

 

                  // Step 4

                  var denominator = a->Real(a->Multiply(s2-s1, a->Conjugate(s2-s1)));

                  var tmp1 = a->Multiply(s2, a->RealToComplex(x0-V0));

                  var tmp2 = a->Multiply(s1, a->RealToComplex(x0-V0));

                  var numerator1 = a->Multiply((tmp1 - a->RealToComplex(v0-V0)),a->Conjugate(s2-s1));

                  var numerator2 = a->Multiply((a->RealToComplex(v0-V0) - tmp2),a->Conjugate(s2-s1));

                  var p1 = numerator1/denominator;

                  var p2 = numerator2/denominator;

 

                  // Step 5

                  var X = a->Real(a->Multiply(cA, vector(cos(w*frame),sin(w*frame),0)));

                  var V = a->Real(a->Multiply(cA, vector(-w*sin(w*frame),w*cos(w*frame),0)));

 

                  // Step 6

                  var xx = X + a->Real(a->Real(a->Multiply(p1,a->Multiply(a->RealToComplex(exp(s1.x*frame)), vector(cos(s1.y*frame),sin(s1.y*frame),0)))) + a->Multiply(p2,a->Multiply(a->RealToComplex(exp(s2.x*frame)),vector(cos(s2.y*frame),sin(s2.y*frame),0))));

                  println("x = ",xx);

                  println(" ");

 

                  // Test with a Sphere object

                  obj->SetAbsPos(vector(0,xx,0));

}



02.jpg 
 

연구소

research

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Advanced Render GI의 시대는 도래하는가..(GI 랜더러 비교) 16 file .피. 2011.06.20 4519
공지 모델링 연구 [아이디어 모집] 비누방울(거품, 거품막) 만들기 8 file 길동 2011.03.08 4245
21 스크립트 연구 스크립트를 모아주세요 2 P. 2008.07.27 399
20 스크립트 연구 자동캐릭터 셋팅 스크립트.P_Rig ver.0.5 15 file P. 2008.07.27 923
19 스크립트 연구 OptiPoly _폴리곤오브젝트로 만드는 스크립트 15 file P. 2008.07.30 603
18 스크립트 연구 Examples 3 길동 2008.11.04 820
17 스크립트 연구 커피스크립트를 이용하여 간단한 카운트다운 애니메이션 만들기 14 file ChoiGeol 2008.11.06 839
16 스크립트 연구 부모 오브젝트 이름에 따라 자식 오브젝트 이름 변경하기 14 file ChoiGeol 2008.11.19 612
15 스크립트 연구 카메라 텐션 Xpresso입니다. 12 전우열 2009.02.28 1557
14 스크립트 연구 태양계 구현하기 (엑스프레소) 4 file 최걸 2010.10.16 301
13 스크립트 연구 이동거리에 따른 원통형물체의 회전 계산 4 file ElasticMind 2008.09.06 676
12 스크립트 연구 토네이도 구현 6 file ElasticMind 2008.09.06 891
11 스크립트 연구 자동차 서스펜션 구현 8 file ElasticMind 2008.09.06 1067
10 스크립트 연구 라이팅셋... 18 file 길동 2005.03.21 1116
9 스크립트 연구 XpressoDomeLighting 7 file 길동 2004.12.10 928
8 스크립트 연구 Cinema 4D XPresso Series 7 file 돌아온 길동 2008.10.01 985
7 스크립트 연구 COFFEE 스크립트 활용을 위한 팁 8 file ChoiGeol 2008.11.23 550
6 스크립트 연구 한 오브젝트를 다른 오브젝트의 포인트에 순차적으로 붙이기(COFFEE) file 최걸 2010.11.25 274
5 스크립트 연구 한 오브젝트를 다른 오브젝트의 포인트에 순차적으로 붙이기(Py4D) file 최걸 2010.11.25 375
4 스크립트 연구 트레이서구현 4 file ElasticMind 2008.09.06 806
3 스크립트 연구 auxetic 구조 XPresso 3 file 정석 2008.10.14 748
2 스크립트 연구 에스프레소를 모아주세요 3 P. 2008.07.27 720
목록
Board Pagination Prev 1 2 3 Next
/ 3