메뉴 건너뛰기

본문시작

스크립트 연구
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 4243
178 스크립트 연구 한 오브젝트를 다른 오브젝트의 포인트에 순차적으로 붙이기(COFFEE) file 최걸 2010.11.25 274
177 스크립트 연구 [COFFEE] 선형 진동 오브젝트 구현 Ver2. - 포인트 레벨 진동 4 file 최걸 2010.12.07 288
176 스크립트 연구 태양계 구현하기 (엑스프레소) 4 file 최걸 2010.10.16 301
175 스크립트 연구 6/25정모 C.O.F.F.E.E. 정모 강좌 자료 2/4 file 최걸 2011.06.25 312
» 스크립트 연구 [COFFEE] 선형 진동 오브젝트 구현 4 file 최걸 2010.12.01 322
173 기타 IESviewerSetup 2.99n 3 file 기즈모 2007.12.10 348
172 스크립트 연구 숫자 순차적으로 변하는 애니메이션을 xpresso로 만들었을 때 멈추는 방법 질문입니다. 2 해피라임 2011.03.29 349
171 스크립트 연구 한 오브젝트를 다른 오브젝트의 포인트에 순차적으로 붙이기(Py4D) file 최걸 2010.11.25 365
170 스크립트 연구 6/25정모 C.O.F.F.E.E. 정모 강좌 자료 4/4 2 file 최걸 2011.06.25 372
169 스크립트 연구 6/25정모 C.O.F.F.E.E. 정모 강좌 자료 1/4 6 file 최걸 2011.06.25 376
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 18 Next
/ 18