選択中のパスからまるっこいものだけ残す

milligrammeさんのブログでInDesign_スベスベあるか? カクカクだけか?という
「直線だけか、曲線を含んでいるか」を調べるスクリプトが公開されたのを見て。
以前イラストレーター用に似たような目的で
「選択中のパスからまるっこいものだけ残す」っていうのを
書いたことを思い出し、見直していたんだけど。コメントを書いてなかったので、「自分でも何だったっけ?」状態。
「右アンカーとアンカーの角度」と「左アンカーとアンカーの角度」をゴニョゴニョしてその「角度の合計をアンカーポイントの数」で割って平均値から「まるっこいか」「かくっぽいか」判定しているようだ。
どうしてこういうアルゴリズムにしたのかがハッキリ思い出せない。
実行するとこんな感じ。

なんとも言えないあいまいな感じ。

download

//2009-9-7 とりあえず。作ってみたけど使い道が…
#include 'c.js';
(function(){
var SIKIICHI = 100; //0~360
c.selection().each(
function(){this.selected = false}
).pathItems().each(function(){
	var TotalRad = 0;
	var TotalL_D = 0;
	c(this).pathPoints().each(function(P){
		var R = P.rightDirection;
		var L = P.leftDirection;
		var A = P.anchor;
		if(R[0] == L[0]  && R[1] == L[1] && A[0] == R[0] && A[1] == R[1]){
				TotalRad +=360;
				TotalL_D +=10;
		}else{
		var R_T = Math.atan2(R[1]-A[1],R[0]-A[0]);
		var R_Ang = R_T*180/Math.PI;
		var R_L = Math.abs(R_Ang) == 90 ?  Math.abs(R[1]-A[1])  :  Math.abs(Math.abs(R[0]-A[0])/Math.cos(R_T));
		var L_T = Math.atan2(L[1]-A[1],L[0]-A[0]);
		var L_Ang = L_T*180/Math.PI;
		var L_L = Math.abs(L_Ang) == 90 ?  Math.abs(L[1]-A[1]) :  Math.abs(Math.abs(L[0]-A[0])/Math.cos(L_T));
 
		TotalL_D += Math.abs(L_L - R_L);
		TotalRad += 180-Math.abs(R_Ang-L_Ang);
		}
 
	});
	//$.writeln(TotalRad/this.pathPoints.length);
	if((TotalRad+TotalL_D)/this.pathPoints.length <= SIKIICHI)this.selected = true;
});
})();