gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

Pythonで円とか線とか線分の交点を求める+普通の値に戻す

Pythonのsympyパッケージを使って交点をもとめます。
返り値を普通の値に戻します。


sympyを使います。
そのなかのgeometryをつかいます。
なのでsympyのパッケージをインストールしてください。
anacondaつかってるなら最初から入ってます。たぶん。

import sympy.geometry as sg

center = sg.Point(5,5)
radius = 2
circle = sg.Circle(center, radius)

line = sg.Line( sg.Point(0,0), sg.Point(10,10))
segment = sg.Segment( sg.Point(0,0), sg.Point(5,5))

result1 = sg.intersection(circle, line)
result2 = sg.intersection(circle, segment)

segmentは線分。result1に円と線、result2に円と線分の交点が入ってます。
説明なしでもなんとなくわかるね。

中身を見てみると

>>> result1
[Point(-sqrt(2) + 5, -sqrt(2) + 5), Point(sqrt(2) + 5, sqrt(2) + 5)]
>>> result2
[Point(-sqrt(2) + 5, -sqrt(2) + 5)]

結果はリストで返ってきます。解が2つ以上ある場合があるからですね。
ここまでは他のサイトにも載ってた気がします。

ここからが問題。この謎の文字列?を普通の値に変える方法が分からなかった。
で、ある人から教えてもらいました。こうすればいいです

>>> float(result1[0].x)
3.585786437626905

intなら
>>> int(result1[0].x)
3