以前gihyo.jpの特集で、Nゲージのエディタを取り上げたことがあります。このエディタでは、レールをドラッグ操作で動かせるようにしました。 レールの始点または終点から、x, y共に±3以内だったら端点と見なすことで、端点をドラッグすると変形になる処理が実現できます。これは簡単ですね。ifの条件で書くと ((sx - 4 < x)&&(x < sx + 4)&&(sy - 4 < y)&&(y < sy + 4)) のようになります。 では、レールの上をドラッグしたら移動になる、という処理はどう書けばよいでしょうか。レールは直線ですが、水平や垂直ではなく斜めにもなります。もちろん、1ドット幅を正確にクリックしないといけないのでは実用になりませんから、ある程度の幅を持たせる必要があります。高校で「点と直線の距離」を習った記憶がありますが、ルートが出てくるなど計算が複雑なため、たくさんの線があ
![第4回 図形のクリックを検出しよう─JavaScriptで外積の計算 | gihyo.jp](https://cdn-ak-scissors.b.st-hatena.com/image/square/a6f368a2ce19651406e05202a3899f11a6717645/height=288;version=1;width=512/https%3A%2F%2Fgihyo.jp%2Fassets%2Fimages%2FICON%2F2011%2F899_geo_anime.png)