Silverback9

#야생으로

Creative Coding 독학 제168일 2024년09월11일(수)

오늘은 2차월 탄성 충돌 계산식을 코드로 표현해 보겠습니다~~^^*

그 전에 복습 삼아, 어제 공부했던, 접촉상태 재연 코드를 하나의 공간 안에 정리해 보겠습니다~^^*


    let impactVector = p5.Vector.sub(other.position, this.position);
      //other 위치좌표에서 this 위치 좌표를 빼서, this에서 other로 향하는 벡터를 만들어  변수 impactVector에 저장합니다. 
    let d = impactVector.mag();
      //impactVector의 길이값은 두 물체 사이의 거리값이기도 합니다.
    if (d < this.r + other.r) {
      // 두 물체 사이의 거리가 두 물체의 반지름의 합보다 작다면
      // 두 물체가 겹쳐진다면 
      let overlap = d - (this.r + other.r);
      // 거리에서 두 물체의 반지름의 합을 빼서 변수 overlap에 저장합니다. 
      // overlap은 마이너스의 값을 갖게 되겠지요?
      let dir = impactVector.copy();
      //impactVector를 복사하여 변수 dir에 저장합니다. 
      //충격 벡터와 동일한 선상에서 두 물체가 뒷걸음치게 될 준비를 합니다. 
      dir.setMag(overlap * 0.5);
      //겹친 부분 직경의 1/2 거리를 뒷걸음치겠습니다. 
      this.position.add(dir);
      //물체 this가 뒷걸음치고
      other.position.sub(dir);
      //물체 other이 뒷걸음칩니다. 
      d = this.r + other.r;
      impactVector.setMag(d);
      // 두 물체의 반지름의 합을 거리에 다시 저장합니다. 
      // impactVector의 길이값은 두 물체의 거리값을 갖습니다.
      // 두 물체는 이제 서로 접촉상태입니다.  

음…근데요….정리를 하다보니…

 dir.setMag(overlap * 0.5);

이 부분이 새롭게 마음에 걸리네요.. 1/2 overlap을 거리값으로 설정하는데…이건…부호가 없는 절대값이 아닌가….싶어서요….

그러면 overlap이 마이너스 값이라는 것이 의미가 없어지는데…

물체 this에서 other로 향하는 impactVector의 방향을 따르는 dir을 물체 this의 position 벡터에 더하면 한 발짝 앞으로 나가는 것이 아닌가????

혹시 impactVector의 방향을 잘못 알고 있나??? 싶어서, 벡터의 뺄셈을 다시 보니…뭔가 잘못 될 것 같아요….

물체 other의 위치 벡터에서 물체 this의 위치 벡터를 빼면, 물체 this의 위치 벡터에서 물체other의 위치 백터로 향하는 벡터가 생성되는 것은 맞는 것 같은데요…

문제는 위치 “좌표”가 아니라 위치 “벡터”라는 점인 것 같아요!!! 어머머!!! 이를 어쩌죠???

네!!! 정신을 가다듬어 다시 정리해 보겠습니다!!!

네….!!!! 물체 this에서 물체 other로 향하는 벡터가 생성되는 것이 아니라, 물체 this의 위치 “벡터”에서 물체 other의 위치 “벡터”로 향하는 벡터가 생성되는 것이 포인트인 것 같아요!!!

어제 저는 물체 this와 other의 위치 벡터를 단순히 물체 this와 other의 위치 좌표로 처리해서, other의 위치 좌표에서 this의 위치 좌표로 향하는 벡터를 그려보았던 것 같아요.

정리한 노트를 저와 함께 살펴봐 주시면 감사하겠습니다!!!

네~^^*

어제의 사고 오류를 찾아서 정정해 보았습니다~^^*

코드 주석 내용 교정은 오늘 오후에 다시 올리도록 할게요….지금 가봐야 해서요^^;;

오늘 공부 내용도…..오후에 제가 다시 돌아와서 올리도록 할게요~~^^*

저의 실수를 따뜻하게 이해해 주셔서 감사합니다~~^^*

오늘도 즐거운 아침 보내시고요!

햇살이 순해지는 저녁에 우리 다시 만나요~~^^*

비님이 햇님을 잠시 다독여 주셨네요~^^*

점심 맛있게 드셨어요~~^^*?

네~^^* 두 물체가 접촉 상태를 재연하도록 하는 코드의 주석 내용을 수정하였습니다~^^*


    let impactVector = p5.Vector.sub(other.position, this.position);
      //other 위치벡터에서 this 위치벡터를 빼서, other에서 this로 향하는 벡터를 만들어 변수 impactVector에 저장합니다. 
    let d = impactVector.mag();
      //impactVector의 길이값은 두 물체 사이의 거리값이기도 합니다.
    if (d < this.r + other.r) {
      // 두 물체 사이의 거리가 두 물체의 반지름의 합보다 작다면
      // 두 물체가 겹쳐진다면 
      let overlap = d - (this.r + other.r);
      // 거리에서 두 물체의 반지름의 합을 빼서 변수 overlap에 저장합니다. 
      // overlap은 마이너스의 값을 갖게 되겠지요?
      let dir = impactVector.copy();
      //impactVector를 복사하여 변수 dir에 저장합니다. 
      //충격 벡터와 동일한 선상에서 두 물체가 뒷걸음치게 될 준비를 합니다. 
      dir.setMag(overlap * 0.5);
      //겹친 부분 직경의 1/2 거리를 뒷걸음치겠습니다. 
      this.position.add(dir);
      //물체 this가 충격벡터 방향으로 반걸음 움직이고
      other.position.sub(dir);
      //물체 other가 충격벡터 반대방향으로 반걸음 움직이겠습니다. 
      d = this.r + other.r;
      impactVector.setMag(d);
      // 두 물체의 반지름의 합을 거리에 다시 저장합니다. 
      // impactVector의 길이값은 두 물체의 거리값을 갖습니다.
      // 두 물체는 이제 서로 접촉상태입니다.  

네~~^^*

이젠 충돌 후의 두 물체의 속도 계산식을 코드로 표현해 보겠습니다~^^*

노트에 정리를 해 보았는데요~~ 코드의 번호를 계산식에서 찾아 하나 하나 짚어보시면, 코드 진행 순서를 이해하기가 좀더 쉬워질 것 같아요~~^^*

오늘은 계산식 표현 코드 그림을 지긋이 감상하구요~~

내일, 이것을 코드로 입력해서, 물체 클래스 정의를 완성해 보도록 할게요~~^^*

오늘은 사진 감상회~~^^*를 편안히 즐겨 주시면 감사하겠습니다~~^^*

오늘 저와 함께 충격벡터의 방향에 대한 오류도 교정하고, 충돌 후 속도 변화 계산식을 코드로 표현하는 노트작업을 함께 해 주셔서 감사합니다~~^^*

내일은 우리, 물체 클래스를 완성해서, 충돌 장면을 표현하는 프로그램을 완성해 볼까요~~^^*

오늘 충격 벡터 impactVector 방향을 저와 함께 Fix 해 주셔서 감사합니다~~^^*

실수를 발견하고 실수를 Fix하는 과정도 함께 나눌 수 있어서 참 감사합니다~~^^*

오늘 하루도 수고 많으셨어요~^^* 맛있는 저녁과 편안한 밤의 깊은 잠이 우리의 피곤한 몸을 Fix해 줄 거예요~~^^*

Relax하는 편안한 밤 보내셔요~~^^* 피로가 Fix 될 거예요~~^^*

그럼 또 우리 내일 생기발랄한 몸으로 다시 또 만나는 거죠~~^^* 그리고 함께 코드 공부 하는 거죠~~~^^*

네~~!!! 꿈은 이루어 집니다~~!!!

댓글 남기기