• ベストアンサー

エクセルで出来るのかを教えてください

エクセルでたとえば(X,Y)が(1,1)→(2,2)→(3,4)→(4,8)→(3,6)→(2,5)→(1,1)となる座標で囲まれた図形(座標間は直線)の中にプロットされる点を1で返し、図形外の点を0で返すようなことができるのかを教えてください。できなければエクセル以外にどのような方法でやったら良いのかを教えてください。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

X座標が始めは大きくなる設定で。 C2セル 傾き =SLOPE(B2:B3,A2:A3) D2セル 切片 =INTERCEPT(B2:B3,A2:A3) 下へオートフィル C8セル =C2 D8セル =D2 作業列 C11セル =MATCH(A11,$A$2:INDEX($A$2:$A$8,MATCH(MAX($A$2:$A$8),$A$2:$A$8,0))) 交点1 D11セル =INDEX($C$2:$C$7,$C11)*A11+INDEX($D$2:$D$7,$C11) 作業列1 E11セル =MATCH(MAX($A$2:$A$8),$A$2:$A$8,0) 作業列2 F11セル =MATCH(A11,INDEX($A$2:$A$8,$E11):$A$8,-1)-1 交点2 G11セル =INDEX($C$2:$C$8,SUM(E11:F11))*A11+INDEX($D$2:$D$8,SUM(E11:F11)) 判定 H11セル =IF(OR(AND(D11<=B11,B11<=G11),AND(G11<=B11,B11<=D11)),"○","×")

-kuma-
質問者

お礼

連絡遅くなりまして申し訳ありません。具体的な入力例まで示していただきありがとうございます。実際にエクセルに入力して確認させていただきます。どうもありがとうございました。

その他の回答 (8)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.9

2つの線分が交差しているかどうかの判定は、次の計算式で可能です。 2つの線分を(x1,y1)-(x2,y2)と(x3,y3)-(x4,y4)としたとき、 つぎの4つの値を計算し、 a=x1(y2-y3)+x2(y3-y1)+x3(y1-y2) b=x1(y2-y4)+x2(y4-y1)+x4(y1-y2) c=x1(y3-y4)+x3(y4-y1)+x4(y1-y3) d=x2(y3-y4)+x3(y4-y2)+x4(y2-y3) ab<0 , cd<0 なら交差しています。 例えば、 2つの線分を(1,1)-(3,3)と(2,4)-(3,1)とすれば、 a=1(3-4)+3(4-1)+2(1-3)=-1+9-4=4 b=1(3-1)+3(1-1)+3(1-3)=2+0-6=-4 c=1(4-1)+3(1-1)+3(1-4)=3+0-9=-6 d=3(4-1)+2(1-3)+3(3-4)=9-4-3=2 ab=-16<0 , cd=-12<0 なので交差していることが分かります。 この計算式をエクセルに組み込めば交差判定ができます。 ただし、この方法で問題となるのは、一方の端点が他方の線上にあるときです。 このときは、a,b,c,dのどれかが0になります。 0のときの処理をうまく扱えれば、図形の内外判定はエクセルの数式だけで可能です。

-kuma-
質問者

お礼

判定方法まで詳しく教えていただきありがとうございます。さっそくためさせていただきます。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.8

図形の内部か外部かを、線分の交点の数で判断する方法があります。 図形を構成する点をP1,P2,P3,・・・,Pn、 図形の外部にある点をQとします。 調べる点をRとしたとき、 線分QRと線分P1P2が交差しているか、 線分QRと線分P2P3が交差しているか、 線分QRと線分P3P4が交差しているか、 ・・・・・ 線分QRと線分P(n-1)Pnが交差しているか、 線分QRと線分PnP1が交差しているか、 を調べて、交差している数が偶数なら外部、奇数なら内部となります。

-kuma-
質問者

お礼

かなりいびつな多角形を書いてみて試してみましたがその通りなのでびっくりしてしまいました。交差しているかいないかの判定がエクセルでできればよいのですね。それも難しそうですね。少し考えて見ます。ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

エクセルの場合に、ある選択したセルが、セル範囲(長方形的、飛び離れたものも含め)に含まれるかは時々使うことがある。Intersectです。 参考 http://officetanaka.net/excel/vba/tips/tips118.htm ーーー エクセルでは四角の隅の座標数値を示して考えることはあまりしません。 シートなりに既に描かれている図形とマウスのポイント点が内部にあるか、外部の点かはあまり問題にする場合は無いのです。多角形はシート上にVBAで描くことは出来る。 フリーフォーム図形でも、内部をクリックしたか、外部かは良く使う。クリックイベントを捕らえるため。 例えば指定の大きさのボタンやシェイプの四角を描いて、そこをクリックするとか言うニーズはあります。 ーー すなわちエクセルの問題としてとらえるのは不適当で、質問のカテが適当でない。木によりて魚を求む、ということです。 またマウスのポイントしている点の数量的表現もエクセルVBAでは現れないと思います(API?) ーー エクセルVBAはVB6.0ベースなので、その範囲でする加減乗除や三角関数計算などで出来るならできる。 この計算を丸投げで回答で求めるのは、行き過ぎ、自分で勉強すること。 ーー http://okwave.jp/qa/q5331300.html のN0.5の示唆となりそうな回答(API)などある。 APIはエクセルVBAの範囲外。このレベルなら自己学習課題だ。 また図形(ワイヤーフレーム図形・光源処理・陰線処理など)に関することなどはこのコーナーの課題を越えている。

-kuma-
質問者

お礼

連絡遅くなりまして申し訳ありません。エクセルのグラフで書かれた多角形について、あとからプロットされた点が図形の中にあるかどうかを判定できる何かの手法があるかと思って質問させていただきましたが、現実は簡単な事ではないことがよくわかりました。また自分の勉強不足も反省しました。ありがとうございました。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.5

例に示した図形は、凹多角形ですね。 この場合は、#3さんの回答にあった、三角形に分割する方法は失敗する場合があるので注意してください。 もちろん最適な三角形分割をすればうまくいきますが、どれが最適かを座標だけで判断するのは難しいでしょう。

-kuma-
質問者

お礼

連絡遅くなりまして申し訳ありません。そうなんです凹多角形なのです。簡単なモデルで検証してみたいと思います。ありがとうございました。

回答No.4

因みに、閉じた多角形を三角形に分割する場合は「三角形を削っていく」のを繰り返すと良いです。 例えば、六角形ABCDEFの場合。 まず、六角形から、隣り合った3つの頂点で出来る三角形を削ります。 六角形ABCDEF⇒三角形ABC+五角形ACDEF 次に、五角形から、隣り合った3つの頂点で出来る三角形を削ります。 三角形ABC+五角形ACDEF⇒三角形ABC+三角形ACD+四角形ADEF 最後に、四角形を2つに分割します。 三角形ABC+三角形ACD+四角形ADEF⇒三角形ABC+三角形ACD+三角形ADE+三角形AEF 結果 六角形ABCDEF⇒三角形ABC+三角形ACD+三角形ADE+三角形AEF となります。 なお、分割に際して「凹みのある多角形かどうか?」を調べる必要がありますので、そこだけ注意して下さい。 凹みのある多角形かどうかの判定については、以下参照。 http://okwave.jp/qa/q783177.html

-kuma-
質問者

お礼

連絡遅くなりまして申し訳ありません。連続で回答ありがとうございます。三角形に分割ですか、リンク先も参照してよく理解してみます。自分としてはエクセルのグラフで書かれた多角形について、あとからプロットされた点が図形の中にあるかどうかを判定できる何かの手法があるかと思っていましたが、現実はそのような簡単な事ではないことがよくわかりました。ありがとうございました。

回答No.3

>エクセルで(略)できるのかを教えてください。 「出来る/出来ない」で答えるなら「出来る」です。 コンピュータの世界では「数値計算なら、出来ない事は存在しない」のです。 それは、どんなコンピューター言語を使ったとしても同じです。 但し、使う言語に「向き/不向き」ってのがあるので、不向きな言語を選んでしまうと「出来るまでに何年もかかる」って結果になったり、向いている言語を選ぶと「5分で出来る」って結果になったりします。 重要なのは「どの言語が、一番、向いているのか」なのです。 なので「○○を使えば5分で出来るのに、なんでわざわざエクセルを使うんだ?バカじゃないだろか」とか「エクセルを使えば5分で出来るのに、なんでわざわざ△△を使うんだ?バカじゃないだろか」と言う事が起きます。 >どのような方法でやったら良いのかを教えてください。 ヒント 四角形は「三角形2つ」に分割できます。五角形は「三角形3つ」に分割できます。六角形は「三角形4つ」に分割できます。 六角形を「三角形4つ」に分割できたら、それぞれの三角形について「座標(X,Y)が三角形の内側にあるか?」を調べます。 1つでも「三角形の内側」と判定されたら「その座標は六角形の内側にある」と言うのが判ります。 三角形の内外判定は以下参照。 http://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter07.html

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

方法1 数学的に座標計算で図形の内部か外部かを判定する。 方法2 イメージコントロールに図形を描いて内部に色を塗り、指定した位置の色を判定する。 方法1なら、数学のカテゴリーで質問したほうがいいでしょう。 方法2なら、イメージコントロールの使い方を調べましょう。

-kuma-
質問者

お礼

連絡遅くなりまして申し訳ありません。数学的な処理ですか・・・難しそうですね。イメージコントロールはこれから確認してみます。ありがとうございます。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

プロットする点の座標は、どのように与えられますか?

-kuma-
質問者

補足

連絡遅くなりまして申し訳ありません。エクセルのセルであたえたいと思います。

関連するQ&A