一般には点ABCがあったとして、ABの直線を示すy=ax+bにACを代入してイコールだったら同一線上にあるってことになるらしい。連立方程式・・・プログラムでどうやるんかわからん。。。ので、まなびーのアドバイスに則り、Aを基準としてAB,ACを結んだ点の角度が同じなら同一線上なんじゃね?というので実装してみる。
↓角度がしきい値内だったらゴニョゴニョする。
var array = [{x:Ax,y:Ay},{x:Bx,y:By},{x:Cx,y:Cy}];
var range = 1; //角度の絶対値のしきい値
var _testAngle1,_testAngle2,_index;
//array[i]を座標の0基準としてarray[i+1]とイベント発生座標の角度を比べる
// Math.atan2() - JavaScript | MDN
// https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2
//引数は、y 座標が 一番目、x 座標が 二番目
_testAngle1 = Math.atan2(array[1].y - array[0].y , array[1].x - array[0].x )/(Math.PI / 180); //ABの角度
_testAngle2 = Math.atan2(array[2].y - array[0].y , array[2].x - array[0].x )/(Math.PI / 180); //ACの角度
//角度の差の絶対値がrange以内なら
if(Math.abs(_testAngle1 - _testAngle2) <=range){
// [do something]
}
それっぽいのでけた!じゃの!
点が直線上にあるかどうか – ある点P(x,y)が、点… – 数学 | Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1450966049
3つの点が1直線上にあるとき / 数学II by OKボーイ |マナペディア|
http://manapedia.jp/text/654
2点を通る直線の方程式
http://www.geisya.or.jp/~mwm48961/math3/linear_func1.html
コメントを残す