fc2ブログ
画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

02 | 2023/03 | 04
S M T W T F S
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

4点からなる交点の求め方

メインページ使える数学


下図のように4点(P1,P2,P3,P4)からなる2直線(P1~P3P2~P4
の交点を求めるのに
外積を応用した方法を紹介します。
なんだか面倒臭そうと思った方は最後の方の答えを見て頂くと、外積を使った方が良さげだと
分かってもらえる?と思います。


4点からなる交点の求め方
上図から交点C1の位置を求めるには、点P1~点C1と点C1~点P3までの長さの比が分かれば、
P1~点P3の直線を求めた比で分割すると交点が求まることが分かります。

この比は直線P2
P4と、点P1、点P3までのそれぞれの距離の比で求まります。
さらに、この比は
直線P2P4を底辺とする⊿P1P2P4⊿P2P3P4の面積の比で求まります。
(図中に示した隣り合う両矢印の比は全て等しくなります。)

ここでやっと三角形の面積を求めるのに外積が登場してきます。
外積なので、上図のようにベクトルを
  
  ベクトルa1 : 点P2⇒点P4
  ベクトルa2 : 点P1⇒点P3
  ベクトルb1 : 点P3⇒点P2
  ベクトルb2 : 点P2⇒点P1

と定義します。(向きにご注意下さい。)

こうすることで、
  ⊿P1P2P4の面積S1 = (a1 × b2) / 2
  ⊿P2P3P4の面積S2 = (a1 × b1) / 2

となります。(この計算ではあえて外積の値の絶対値を取っていません。)

あとは面積S1とS2との比を使うと交点が求まります。
このことを整理して点P1~点P4の座標を用いて交点の座標を表すと、

面積S1 = {(P4.X - P2.X) * (P1.Y - P2.Y) - (P4.Y - P2.Y) * (P1.X - P2.X)} / 2
面積S2 = {(P4.X - P2.X) * (P2.Y - P3.Y) - (P4.Y - P2.Y) * (P2.X - P3.X)} / 2

となり、交点の座標は

C1.X = P1.X + (P3.X - P1.X) * S1 / (S1 + S2)
C1.Y = P1.Y + (P3.Y - P1.Y) * S1 / (S1 + S2)

となります。  .X 、 .Y はそれぞれ点のX座標Y座標を示します。

と、少し回りくどい説明になってしまいましたが、この計算で交点を求めると、
下図のような点の配置全てに同じ式で求めることができるので、オススメです。

これを知らないと、2直線の式を求めて、直線の交点を求めたりもしますが、直線の傾きが
水平や垂直だった場合などの条件分けをしないといけないので、結構面倒です。
(って、私が昔やっていた方法です...)

(追記)
この処理を水玉製作所の川村様がFlashで実現されています。
4点からなる交点が簡単に求められるのが、これを下記リンク先を見ると分かると思います。
http://www.mztm.jp/2010/08/05/clossline/


4点からなる交点を求める

4点からなる交点を求める。

4点からなる交点を求める。

 

Loading...
スポンサーリンク

この記事に対するコメント
Re: タイトルなし
無事解決できたようで良かったです。

このやり方を知っていると便利だと思いますので、ご活用ください。
【2021/12/10 08:35】 URL | Akira #- [ 編集]


返信ありがとうございます。
式あってました。

自分のプログラムをもう一度確認してみたところ、私の計算ミスでした。
ご心配おかけして申し訳ありません。
【2021/12/09 18:14】 URL | けい #- [ 編集]

Re: タイトルなし
けいさん、コメント頂きありがとうございます。

念のため、エクセルでもう一度確認してみましたが、交点がズレる事はありませんでした。
リンク先のページでも、本ページを参考にプログラムを作って頂いているので、おそらく式は合っていると思います。

今一度、作成したプログラムを確認してみてください。
【2021/12/08 23:26】 URL | Akira #- [ 編集]


交点座標は求まりません
プログラムを書いて試してみましたが、正しい交点座標とは値が異なる結果になりました。
【2021/12/08 09:07】 URL | けい #- [ 編集]


ご返事ありがとうございます。
2直線が並行になったとき、交点座標が Infinity(JavaScript 1.3)という特別な値にはなりますが、例外が投げられるということはありませんでした。
【2012/10/17 23:26】 URL | tsmsogn #- [ 編集]

Re: 大変参考になりました
リンクありがとうございました。
JavaScriptだと計算の分母が0になる場合(2直線が平行になった時の対応)でも大丈夫なんですかね?
私の記事には、そこまで書いてません...(-_-;)
画像処理ソリューション Akira
【2012/10/17 20:43】 URL | Akira #- [ 編集]

大変参考になりました
JavaScript で直線同士の交点座標を求めるのに、よい方法がないかと探しておりました。
お陰様でスムーズな理解・コーディングができました。ありがとうございました。

また、ブログにも紹介させていただきました。
もし、不備等あればご指摘いただければと思います。
http://tsmsogn.com/blog/2012/10/17/easeljs/
【2012/10/17 19:30】 URL | tsmsogn #- [ 編集]

Re: ブログに掲載しました。
川村様。はじめまして。
ブログに掲載頂きありがとうございました。
このFlashは交点が直感的に求まっているので、触っていてちょっと楽しかったです。
私もこのFlashと同じ様な事をエクセルでやりましたが、川村様も(私も)2直線の式の連立方程式で交点を求めた事があるのなら、このスッキリとした処理に感動しますよね?!

ここの記事の例は外積の例ですが、
http://imagingsolution.blog107.fc2.com/blog-entry-147.html
で紹介しているような、内積、外積の処理も結構オススメです。
【2010/08/05 20:37】 URL | Akira #- [ 編集]

ブログに掲載しました。
はじめまして。川村と申します。
Flash製作で交点を求めるのに少し苦労しておりました。
拝見させていただきまして、感動いたしました。

弊社のブログにも紹介させていただきました。
http://www.mztm.jp/2010/08/05/clossline/
ありがとうございました。
【2010/08/05 20:05】 URL | 川村 #FQjD6uxA [ 編集]

Re: タイトルなし

galkinさん。ご指摘頂きありがとうございました。
ご指摘の箇所は修正しておきました。
今後とも、よろしくお願い致します。
【2009/08/10 21:17】 URL | Akira #- [ 編集]


はじめまして。
最近、仕事で画像処理の知識が必要になり、参考にさせて頂いてます。
私も2直線の式から交点を求めていましたが、こんな方法があったのですね!

ところで…
 ⊿P1P2P4の面積S1 = (a1 × b2) / 2
⊿P2P3P4の面積S2 = (a1 × b1) / 2
……ですよね?

【2009/08/10 15:06】 URL | galkin #- [ 編集]

Re: タイトルなし
lppes.nbさん、長らくご愛顧頂きありがとうございます。
ここに書いてある外積を使った解き方も、以前紹介した「信号処理入門」の本を読んでから、内積や外積に興味を持ち始めて、このような考え方をするようになりました。
ホント、内積、外積は便利です。
【2009/06/08 21:05】 URL | Akira #- [ 編集]


なるほど!これからはこれを使わせていただきます。
【2009/06/08 12:20】 URL | lopes.nb #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→https://imagingsolution.blog.fc2.com/tb.php/137-836bb8d1
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計