• ベストアンサー

線対称な直線を求めたい

3本の直線があります。 SI=a1x+b1y+c1 SJ=a2x+b2y+c2 SK=a3x+b3y+c3 SKを基準とし、SJに対称なSIを求めるにはどうすればよいでしょうか? SIのa1,b1,c1の求め方を教えて下さい。 どうぞよろしくお願い致します。

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

  • ベストアンサー
  • oze4hN6x
  • ベストアンサー率65% (26/40)
回答No.1

まずは、SJとSKの交点の座標(x0,y0)を求めて、それが原点になるように平行移動をします。すると直線の方程式は SI: a1x + b1y = 0 SJ: a2x + b2y = 0 SK: a3x + b3y = 0 となります。求めるべきSIの式は a1(x+x0) + b1(y+y0) = 0 で与えられますから、問題はa1とb1を求めることに帰着されます。 それぞれの直線の法線ベクトルは SI: n1 = (a1, b1) SJ: n2 = (a2, b2) SK: n3 = (a3, b3) ですから、n1 は n2 に関して n3 と対称なベクトルとして求めることができます。 n2 とx軸がなす角度をθとすると、n3 を-θだけ回転し、x軸に関して対称に折り返し、+θだけ回転したものが n1 です。したがって、θ回転行列を R(θ), x軸に関する折り返し行列を X とすると n1 = R(θ)XR(-θ)n3 となります。この計算は参考URLの通りです。θについては (cosθ,sinθ) = C2(a2, b2), C2 = (a2^2+b2^2)^(-1/2) ですから、これで n1 = (a1, b1) が計算できて、答えが得られることになります。

参考URL:
http://bit.ly/1wcaHAu
rechirin
質問者

補足

すいません。 何かが違います・・ 教えて下さい。 Θを求める計算 C2=(a2^2+b2^2)^(-1/2) ↓ Th = -Math.Sqrt(a2 * a2 + b2 * b2); http://bit.ly/1wcaHAuの x=cosΘ^2-sinΘ^2 y=2sinΘcosΘ x0=2sinΘcosΘ y0=sinΘ^2-cosΘ^2 とすると x = Math.Cos(Th) * Math.Cos(Th) - Math.Sin(Th) * Math.Sin(Th); y = 2 * Math.Sin(Th) * Math.Cos(Th); x0 = 2 * Math.Sin(Th) * Math.Cos(Th); y0 = Math.Sin(Th) * Math.Sin(Th) - Math.Cos(Th) * Math.Cos(Th); としたのですが、何か間違っているでしょうか?  本当に申し訳ありません。 どうぞよろしくお願い致します。

その他の回答 (3)

  • oze4hN6x
  • ベストアンサー率65% (26/40)
回答No.4

-1をかけるのは必要ですね。私が間違っていました。すみません。 atan2でうまく行くようでしたらそれでもよいのでしょう。プログラミングの問題ということであれば、初めから違ったアプローチになります。カテゴリを変えて質問されると異なった回答が得られるでしょう。実際、もっと効率がよく一般性の高い方法があります。ただし、私が今回用いた数学が難しいと感じられるようですと、そうした方法もまた難しいかもしれません。

rechirin
質問者

補足

先日の質問も含めて本当にありがとうございました。 カテゴリ選びは今後気を付けます。 数学系の問題だと思ったのですが、 結果、自分の扱える範囲を超えてしまったようです。 今後もこのような問題にあたることが多いと思いますので 数学を勉強したいと思います。 本当にありがとうございました。

  • oze4hN6x
  • ベストアンサー率65% (26/40)
回答No.3

SJ, SKの角度とはどの角度なのか不明 Math.Atan2が何を求める関数か不明 ・・・なのではっきりとしたことは答えられません。 後者が単純に arctan であるとすると、No. 2補足コメントのような方法ではうまく行く場合も、うまく行かないこともあります。a_n, b_n の正負による場合分けが必要になるでしょう。(・・・私はそのような面倒な場合分けは間違いの元なので考えたくありません。そこで回答に示したような別の方法を取っているわけです。) atan2が直線がx軸の正の向きとなす角度(0-π)を与えるような便利な関数であるとすると、No. 2補足コメントで意図されていることは有効でしょうね。その場合には、a1の最後に -1 をかけているのは不要に見えます。ただし、これは atan2がどのような関数であるかに依るので、間違いではないかもしれません。 ちなみに、数学の問題としては、atan2が返す値をどうやって求めるのかに答えてないので失格です。私の回答は、場合分けもせず、そのような関数も使わないでa2,b2等だけで答えを表現することを意図しています。

rechirin
質問者

補足

まず、何度もご返答、本当にありがとうございます。 atan2については、 http://msdn.microsoft.com/ja-jp/library/system.math.atan2(v=vs.110).aspx -180~180で表現できるので大丈夫かと思いました。 (関数が賢いようで、SK=-170 SJ=150でも正しく答えが出ているようです。) -1をかけるのは、実は私も気になっているのですが、y=axの形に直し、CADで 絵を描いてみると-1をかけないとどうしても、ax+by=0の形に合わなくなってしまいます。 ともあれ、おっしゃるとおり便利関数に頼っている時点で、数学ではお話に ならないと思います。 数式は理解できなかったのですが、角度の求め方だけ使わせて頂きます。 本当にありがとうございました。 答えが出るようですので、もう少しで閉めさせて頂きます。 …もう少し数学を勉強します・・

  • oze4hN6x
  • ベストアンサー率65% (26/40)
回答No.2

あなたの表記で書くと、 (a2^2+b2^2)^(-1/2) = 1 / Math.Sqrt(a2 * a2 + b2 * b2) です。つまり、 cosθ = a2 / Math.Sqrt(a2 * a2 + b2 * b2) sinθ = b2 / Math.Sqrt(a2 * a2 + b2 * b2) です。n2をその長さで割ると、n2と同じ向きの単位ベクトルが得られますね。その単位ベクトルのx, y座標として、cosθ, sinθが得られるということです。

rechirin
質問者

補足

すいません。いろいろ説明いただいた式がぜんぜん理解できなかったのですが、 よーく冒頭の >n2 とx軸がなす角度をθとすると、n3 を-θだけ回転し、x軸に関して対称に折り返し、 >+θだけ回転したものが n1 です。したがって、θ回転行列を R(θ), x軸に関する折り返し >行列を X とすると をよみ、以下の式でa1X+b1Yを求めました。 double angSJ, angSK,angSI; //SJ,SKの角度 angSJ = Math.Atan2(-a2, b2); angSK = Math.Atan2(-a3, b3); //教えて頂いた方法からSIの角度を求める(少し違うかも) angSI = (angSK - angSJ+angSK); double a1, b1; a1 = Math.Cos(angSI) *-1; b1 = Math.Sin(angSI);     ↑これでどうでしょうか? CADで書いてみるとあっているように思えるのですが・・・

関連するQ&A

  • 直線に関して対称な直線

    直線3x-y-1=0…1に関して、直線x-y+1=0…2と対称な直線の方程式を求めよ。 という問題なんですが 直線2上の点p(0,1)の直線1に関して、対称な点をQ(a,b)とすると、直線PQと直線1は垂直であるから、 (b-1/a)×3=-1 と解説に書いてあるのですが、 なぜ(b-1/a)になるのかが分かりません(。-_-。) どなたか解説お願いします(>人<;)

  • 線対称な直線の問題  

    直線f(x、y)=0に対して以下の点、または直線に関する対称な直線の方程式を求めよ (1)点(α、β)に関して (2)直線y=xに関して (3)直線y=ax+bに関して 思いついた問題を自分でといてるんですが中々解けません。(というか適当に思いついただけなので答えが存在するかどうかすら確実ではありません) たとえばx軸に関してf(x、y)=0と対称な直線はf(x、-y)=0ですよね?これと同様にやっぱりこういったものには規則性があると思って考えてるんですが・・・。 もしご存知のかたが居られましたらご教授いただきたいです よろしくおねがいいたします

  • 直線 点 対称

    直線l:y=2x+1に関して点(1,1)と対称な点の座標を求めよ また、lに関して直線m:y=2x/3 + 1/3と対称な直線の方程式を求めよ 行列を使うのでしょうか?解き方を教えてください

  • 二次関数と線対称 宜しくお願いします。

    関数y=x^2と関数y=x+2があり、関数y=x+2とy軸との交点をP、関数y=x+2と関数y=x^2との交点を それぞれ点A(-1,1)点B(2,4)とする。 (1)原点Oをとおり、三角形OABの面積を二等分する直線の式をもとめなさい。 (2)点Pを(1)でもとめた直線を対象の軸として線対称に移動した点をQとする。このとき、点Qと点Bを通る直線の式を   もとめなさい。

  • 直線に関して対称な点

    直線5x+2y-2=0に関して、次の点と対称な点の座標を求めよ。 (1)原点 (2) (-3,2) (3) (7,2) 原点の対称な点とはどこのことを言うのでしょうか? どなたか解説よろしくお願いします(。-_-。)

  • 2直線の交点

    まず、 交わる2直線 a1x+b1y+c1=0-(1) a2x+b2y+c2=0-(2) について、a1x+b1y+c1+k(a2x+b2y+c2)=0-(3) は(1)と(2)の交点を通る直線を表す。 これは、どうやって証明するのでしょうか? また、式自体、よく意味がわかりません、どういうことなのでしょうか?

  • 対称式、交代式の因数

    対称式・・・ a.b.cの対称式は, a + b b + c c + a の うちの1つが因数ならば、他 の2つも因数である。 交代式・・・a. bの交代式は、因数a-bをもち, a. b. cの交代式は、因数 a - b b - c c - a を もつ。 という説明がプリントにあったのですが、なぜそういえるのかわかりません。また、(x+y+z)^3-(x^3+y^3+z^3)の因数分解の解説で、x、y、zの対称式である。たとえば式全体を(x+y)や(y+z)でくくることを意識する。とあったのですが、意味がわかりません

  • 点と直線 大急ぎです。

    3直線7x+y-5=0…(1) x+4y+7=0…(2) 2x-y+5=0…(3) に対して(1)と(2)の交点をA,(2)と(3)の交点をB,(3)と(1)の交点をCとる。 次の問に答えよ。 1問目)Aを通り、△ABCの面積を2等分する直線の方程式を求めよ。 1問目は解けました。 A(1,ー2)B(3,1)C(0,5) 答えは5y+8x+2=0 2問目)直線(3)上の点D(一2分の5,0)を通り、△ABCの面積を2等分する直線の方程式を求めよ。 3問目)Aを通り,BとCから等しい距離にある直線の方程式を求めよ。 2問目と3問目を教えて下さい。 明日までなんです。 お願い致します!!

  • 不動直線

    直線の一致条件に疑問があるので、質問します。 固有値などは使わず、高校数学の範囲での解答をお願いします。 行列は[]で一つの行列を表し、{}を一行分とし、列をカンマで区切って表します、お願いします。下記の行列では2列目の成分は、一行目が-1,2行目が3です。お願いします。 問題は、行列[{2,-1}{-2,3}]で表される1次変換によって、自分自身にうつされる直線の方程式を求めよ。とういうものです。 解答では、求める直線ax+by+c=0(a≠0またはb≠0)・・・(1)とおくと(1)上の点(x,y)の像(x',y')は(1)上にあるから、ax'+by'+c=0・・・(2) [{x'} {y'}]=[{2,-1}{-2,3}][{x} {y}]より x'=2x-y,y'=-2x+3yを(2)に代入すると (2a-2b)x+(-a+3b)y+c=0・・・(3) (3)は(1)と同じ直線を表すから、 (ア)c≠0のとき 2a-2b=a -a+3b=b より a=2b≠0 このとき(1)は2x+y+k=0 (k=c/b≠0)と表される。 (イ)c=0のとき  (2a-2b)/a=(-a+3b)/b より  a^2-ab-2b^2=(a+b)(a-2b)=0 よって a=-b≠0,a=2b≠0このとき(1)は x-y=0,2x+y=0となる。 (ア)(イ)より求める直線は、x-y=0,2x+y+k=0(kは任意の実数)。 となっていました。 インターネットで調べたら、(ア)のように(3)と(1)のxの係数どうし、yの係数どうしが同じだから同じ直線とはいえない。例えば、x+y+1=0と2x+2y+2=0は同じ直線だが、xの係数どうし、yの係数どうしがちがう。 (ア)の場合は、(3)と(1)のcの値が同じだから、直線の定数倍は考えず、完全な一致しか考えられないのかと思ったのですが、(イ)の場合でもcの値が同じ(両方0)だから、おかしいと思ったりしました。不動直線が原点を通る、通らないで、なにか違うかとインターネットで調べましたが、解決の糸口はみつかりませんでした。 どなたか、どうして(ア)のように、係数比較でよいのかを教えてください。お願いします。

  • 2直線の交点を通る直線の式について

    2直線の交点を通る直線の式について 2直線をax+by+c=0,a'x+b'y+c'=0の交点を通る直線の式は ax+by+c+k(a'x+b'y+c')=0 …(*) であらわすことができますよね。 (*)が、2直線をax+by+c=0,a'x+b'y+c'=0の交点を通る直線の式となっていることは理解できます。 しかし、(*)の式を用いなくても、2直線の交点を通る直線の式を求めることはできますよね。連立方程式を解いたりして… わざわざ、(*)のような式を立てる意味は何ですか?? また、なぜk倍しているのでしょうか?? そもそも、なぜ異なる2式を(*)のように足すことができるのでしょうか?? 回答よろしくお願いします。