$\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);
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;
}