Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
円と円の交点の求め方
@shora_kujira16
• ICPCのライブラリを整備していたら

「円と円の交点」のコードがよく分からなかったの
で解説します。
• 参考にしたコードはコレです
問題のコード
pair<P, P> cc_cross(const C& c1, const C& c2) {
double d = abs(c1.p - c2.p);
double rc = (d*d + c1.r*c1.r - c2.r*c2...
double d = abs(c1.p - c2.p);
d
c1.p
c2.p
double rc =

(d*d + c1.r*c1.r - c2.r*c2.r) / (2*d);
cos = a2
+b2
c2
2ab
余弦定理
b
c
aθ
double rc =

(d*d + c1.r*c1.r - c2.r*c2.r) / (2*d);
b
bcosθ
θ
cos =
a2
+ b2
c2
2ab
b cos =
a2
+ b2
c2
2a
double rs = sqrt(c1.r*c1.r - rc*rc);
c1.r
rc
rs
P diff = (c2.p - c1.p) / d;



=> diffは c1.p→c2.p の単位ベクトル
d
c1.p
c2.p
c1.p + diff * P(rc, rs)

長くなるので次のページヘ
rc
rs
c1.p
diff * P(rc, rs) とは?

=> rc*diff + rs*rot90(diff) のこと
di = (x + jy)
rot90(di ) = rot90(x + jy)
= y + jx
di P(rc, rs) = (x ...
c1.p + diff * P(rc, -rs)

先ほどと同様
rc
rs
c1.p
感想
• 余弦定理便利なんだけど、よく忘れる
• jを掛けて90 回転させるテクニックに気づくのに時
間がかかってしまった(電気系なら日常的に使って
いるはずなのに)
Upcoming SlideShare
Loading in …5
×

円と円の交点の求め方

1,523 views

Published on

Published in: Education
  • Be the first to comment

円と円の交点の求め方

  1. 1. 円と円の交点の求め方 @shora_kujira16
  2. 2. • ICPCのライブラリを整備していたら
 「円と円の交点」のコードがよく分からなかったの で解説します。 • 参考にしたコードはコレです
  3. 3. 問題のコード pair<P, P> cc_cross(const C& c1, const C& c2) { double d = abs(c1.p - c2.p); double rc = (d*d + c1.r*c1.r - c2.r*c2.r) / (2*d); double rs = sqrt(c1.r*c1.r - rc*rc); P diff = (c2.p - c1.p) / d; return make_pair(c1.p + diff * P(rc, rs), c1.p + diff * P(rc, -rs)); }
  4. 4. double d = abs(c1.p - c2.p); d c1.p c2.p
  5. 5. double rc =
 (d*d + c1.r*c1.r - c2.r*c2.r) / (2*d); cos = a2 +b2 c2 2ab 余弦定理 b c aθ
  6. 6. double rc =
 (d*d + c1.r*c1.r - c2.r*c2.r) / (2*d); b bcosθ θ cos = a2 + b2 c2 2ab b cos = a2 + b2 c2 2a
  7. 7. double rs = sqrt(c1.r*c1.r - rc*rc); c1.r rc rs
  8. 8. P diff = (c2.p - c1.p) / d;
 
 => diffは c1.p→c2.p の単位ベクトル d c1.p c2.p
  9. 9. c1.p + diff * P(rc, rs)
 長くなるので次のページヘ rc rs c1.p
  10. 10. diff * P(rc, rs) とは?
 => rc*diff + rs*rot90(diff) のこと di = (x + jy) rot90(di ) = rot90(x + jy) = y + jx di P(rc, rs) = (x + jy) · (rc + jrs) = rc(x + jy) + rs( y + jx) = rcdi + rsrot90(di )
  11. 11. c1.p + diff * P(rc, -rs)
 先ほどと同様 rc rs c1.p
  12. 12. 感想 • 余弦定理便利なんだけど、よく忘れる • jを掛けて90 回転させるテクニックに気づくのに時 間がかかってしまった(電気系なら日常的に使って いるはずなのに)

×