正射影ベクトル

Untitled

$\vec{b}$の$\vec{a}$への正射影ベクトル$_{\vec{b}\rightarrow}\vec{a}$は以下のように表せる

$$ _{\vec{b}\rightarrow}\vec{a}=\dfrac{|\vec{b}|cos \theta}{|\vec{a}|}\vec{a} $$

分子分母に$|\vec{a}|$をかける

$$ _{\vec{b}\rightarrow}\vec{a}=\dfrac{|\vec{a}||\vec{b}|cos \theta}{|\vec{a}|^2}\vec{a} $$

$\vec{a}\cdot\vec{b}=|\vec{a}||\vec{b}|cos \theta$より

$$ _{\vec{b}\rightarrow}\vec{a}=\dfrac{\vec{a}\cdot\vec{b}}{|\vec{a}|^2}\vec{a} $$

メモ

$r=\dfrac{\vec{p}\cdot\vec{q}}{|\vec{p}|^2}$を求めるプログラム

double r = p.dot(q) / p.dot(p);

7319AE68-01D7-4BB6-80D0-3079FCE73968.jpeg

rが0より以上1以下の上の状態になるこれを判定するプログラムを以下に示す

bool check_range(const double x,const double y) const
    {
        stm32_library::Vector2 p = {end.x - start.x,end.y - start.y};
        stm32_library::Vector2 q = {x - start.x,y - start.y};
        double r = p.dot(q) / p.dot(p);
        if(r <= 0){
            return false;
        }
        else if(r >= 1){
            return false;
        }
        return true;
    }