質問: 座標の中心と、指定した座標との間で、最も近い円周の座標の取得方法を教えてください。 とりあえずジャバスクリプトで計算しているので下記のソースで計算していますが、添付画像のように、コントローラーの外周より外側に針(ポインタ)がある場合、何とかして円周の座標にポインタを収めたいのですが、計算式が分かりません。 //針の中心からの距離を取得 let 中心からの距離= Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); //座標が円の内側の場合だけ針の座標を設定する if (距離 > 0 && 距離 < 要素の半径) { $('針の座標').css({'left':x, 'top':y}); //針を指定座標に移動する } ↑この計算式だと円の外周にポインタがある場合は一切ポインタが動けないので、外側の座標でポインタを動かしている間は全く座標を追うことができず、ポインタはフリーズしたままの状態となってしまいます。 計算式が簡単ならいいんですが、算数が得意な方、宜しくお願いします。
回答: 中心の座標を(x0,y0)とし、針の先の座標を(x1,y1)とします。 要素の半径をr、中心と針の先の距離をRとすると、三角形は相似なので、求める(x+x0,y+y0)は、 R:r=(x1-x0):(x+x0)=(y1-y0):(y+y0) が成り立つはずです。 (x+x0)R=r(x1-x0) x+x0=r(x1-x0)/R x=r(x1-x0)/R-x0 y+y0=r(y1-y0)/R y=r(y1-y0)/R-y0 で求められると思います。(たぶん)