AI Corner detection
今日も寝坊してお昼がコンビニになりました。良くないですね。外に出るとくらっとするような日差しでもはや殺人的です。そんなこんなですが、このところはお家に帰ると新作を模索してバルーンねじねじしています。でも頭のスミにはスクリプトの虫が済んでますので、片時もapp.activeDo…てのが離れない状態なのです。
今回は連休前ということでオマケを投げ込んでおきます。これ単体では全く役に立たないという代物です。
ファンクションなのですが、引数に与えたパスポイントがコーナーかカーブかを判断する為のものです。
ジオメトリカルな処理に付随して必要になったので昨晩頭の中で考えて今朝コードに落ちた出来立てほやほやです。
function isCorner(pt){
var p= new Array();
p[0] = pt.anchor;
p[1] = pt.leftDirection;
p[2] = pt.rightDirection;
var delta = (p[0][1] – p[1][1]) / (p[0][0] – p[1][0]);
var ofst = p[0][1] – p[0][0] * delta;
var rslt = Math.floor(delta * p[2][0] + ofst) – Math.floor (p[2][1]);
if (rslt==0) return false;
else return true;
}
一次関数のライン上に乗るか乗らないかで判断しています。また、使用目的ではゆるいコーナーも除外したいので小数点以下をドロップして処理しています。この辺りは用途によって書き換えてくださいね。