알고리즘문제해결책 갖고 있는 분들 질문점..

  • cjkis
    cjkis

    PINBALL문제 536페이지에

    // here 에 있던 공이 dir 방향으로 굴러와 center 를 중심으로 하는 장애물에서
    // contact 위치에서 충돌했을 때 공의 새로운 방향을 반환한다
    vector2 reflect(vector2 here, vector2 dir, vector2 center, vector2 contact) {
        return (dir - dir.project(contact - center) * 2).normalize();
    }
    

    라고 되어있는데요

    이게 어째서 반사벡터가 되는거죠 ㅡㅡ

    설명에는 d'+d를 -d에 두번더하라고 되어있는데

    그럼 -d+(d'+d)+(d'+d)=-d+2d'+2d=2d'+d 인데요..

    함수안에서 dir이 d아닌가요? 그럼

    dir.project(contact-center)*2 + dir 이 되어야하는것 아닌가요?


    9년 전
5개의 댓글이 있습니다.
  • restart
    restart

    d'이 (-dir.project(contact-center))입니당..


    9년 전 link
  • cjkis
    cjkis

    감사합니당 크크...


    9년 전 link
  • cjkis
    cjkis

    아 그런데 저 함수에서 normalize()안해도 정답으로 나오는데 굳이 normalize로 해주는 이유가 있나요??


    9년 전 link
  • wookayin
    wookayin

    벡터 연산을 자주하다보면 원소들의 매우 값(amplitude)이 크거나 작아질 수 있는데, 나중에 수치적 안정성(numerical stability)이 떨어져서 계산 오차가 발생할 수 있습니다. 그래서 normalize를 하면 좋구요. 또한 값을 눈으로 보기도 편하고.. 등등 여러가지 이유가 있습니다 ~


    9년 전 link
  • cjkis
    cjkis

    감사감사 크크...


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.