プロが教えるわが家の防犯対策術!

PLCのプログラムを作っているのですが、三角関数(?)の部分で
完全に躓いてしまいました。どうか教えて頂けないでしょうか?

点A(0.0)と点B(任意点X.Y)を直線で結びんで、その直径で円を描いて
(点AとBを直径とする円です)直線の中間点より垂直に円と交差する場所まで
線を一本(座標は正数エリアのみ)描いた時、円と交差する垂直線の点の座標を
求める式を考えています。

(情報がなにか足りない場合は仰って頂けると有難いです。)

三角関数が自分ではサッパリ分からない為、どなたかご教授頂けると幸いです。

よろしくお願いします。

A 回答 (4件)

>直線の中間点より垂直に


直線の中間点とは、円の中心のことですか?
何と何が垂直なのでしょうか?

この回答への補足

回答ありがとう御座います。
分かり辛くて申し訳ありませんでした。

直線の中間点は円の中心になります。
垂直線は線ABに対してで、正数側にのみ、円と交差する部分点まで伸ばす計算です。

よろしくお願いします。

補足日時:2012/08/29 17:30
    • good
    • 0

円の中心は(X/2,Y/2)、円の方程式は(x-X/2)^2+(y-Y/2)^2=r^2


ただし、r=(1/2)√(X^2+Y^2)
指定の垂直線の方程式は、傾斜が-X/Yで(X/2,Y/2)を通るので、
y切片をCとするとy=(-X/Y)x+CからY/2=(-X/Y)(X/2)+C、
(X^2+Y^2)/2Y=Cなので、垂直線はy=(-X/Y)x+(X^2+Y^2)/2Y
この直線と円の方程式を連立で解けば、求める点の座標x,yが
得られると思います。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。

連立方程式で解く方法があるのですね・・
全く思いつきませんでした。

今回は何とか乗り越えられそうです。

助すけて下さり、有難うございました。

お礼日時:2012/08/30 10:30

交点をP,Qとすると(P:右下、Q:左上)



P(X/2+rsinΘ, Y/2-rcosΘ)

Q(X/2-rsinΘ, Y/2+rcosΘ)

tanΘ=Y/X

または

sinΘ=Y/√(X^2+Y^2)

cosΘ=X/√(X^2+Y^2)

r=(1/2)√(X^2+Y^2)
    • good
    • 0
この回答へのお礼

回答有難うございます。

見させて頂くと、やはり質問させて頂いて正解だったと
痛感しました。

SIN.COS.TANがサッパリなので再度勉強させて頂こうと思います。

有難うございました。

お礼日時:2012/08/30 13:13

ANo.1です。

補足について

A(0,0)B(X,Y)なので、円の中心はABの中点だから
((0+X)/2,(0+Y)/2)=(X/2,Y/2)
半径は、Aから中心までの長さだから、
√(X/2-0)^2+(Y/2-0)^2=)√(X^2/4)+(Y^2/4)
=(1/2)√X^2+Y^2
円の方程式は、
{x-(X/2)}^2+{y-(Y/2)}^2=(1/4)(X^2+Y^2)……(1)
直線ABの傾き=(Y-0)/(X-0)=Y/X
ABに垂直な直線の傾きmは、m×(Y/X)=-1より、m=-X/Y
円の中心を通るから、直線の式は、
y-(Y/2)=(-X/Y)・{x-(X/2)}……(2)
(2)を(1)へ代入して、
{x-(X/2)}^2+(X^2/Y^2)・{x-(X/2)}^2=(1/4)(X^2+Y^2)
{(Y^2+X^2)/Y^2}・{x-(X/2)}^2=(1/4)(X^2+Y^2)より、
{x-(X/2)}^2=Y^2/4だから、
x-(X/2)=±Y/2 …(3)  よって、x=(1/2)(X±Y)
(3)を(2)へ代入して
y-(Y/2)=(-X/Y)・(±Y/2)だから、
y-(Y/2)=-X/2,y-(Y/2)=X/2
よって、y=(1/2)(Y-X),y=(1/2)(Y+X)

以上より、円と直線の交点の座標は、
x=(1/2)(X+Y),y=(1/2)(Y-X),または、
x=(1/2)(X-Y),y=(1/2)(Y+X)

B(X,Y)の座標を代入して、x>0,y>0になる場合を採用すればいいと思います。
    • good
    • 0
この回答へのお礼

ご回答有難う御座いました。
詳しく教えて下さり、本当に助かりました。

正直見た瞬間はサッパリでしたが、噛み砕いて整理すると、
成程・・・と納得出来、おかげで乗り越えられました。

助けて下さり、ありがとう御座いました。

お礼日時:2012/08/30 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!