0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Arc-Line Intersection Calculation / Intersection of Circular Arc and Line「円弧と直線の交点計算の公式?」をAI先生に教えてもらいました。

0
Last updated at Posted at 2026-08-29

・円弧と直線の交点計算の公式? を覚えている人はいないと思う。

Gemini は AI であり、不正確な情報を表示することがあります。

Gemini先生へ。

(回答省略)

sympyで

???

# SymPyを用いた円弧と直線の交点計算スクリプト(1点接時抽出版)
import sympy as sp


def calculate_arc_line_intersection_tangent(
    Ax1, Ay1, Ax2, Ay2, Ar, Bx1, By1, Bx2, By2
):
    """円弧A (Ax1, Ay1)-(Ax2, Ay2) [半径 Ar] と

    直線B (Bx1, By1)-(Bx2, By2) が接する1点(xM, yM)を計算する関数
    """

    # 1. 円弧Aの円心座標 (xcA, ycA)
    def get_circle_center(x1, y1, x2, y2, r):
        xm = (x1 + x2) / 2
        ym = (y1 + y2) / 2
        dx = x2 - x1
        dy = y2 - y1
        d = sp.sqrt(dx**2 + dy**2)
        r_abs = sp.Abs(r)
        h = sp.sqrt(r_abs**2 - (d / 2) ** 2)
        ux = dx / d
        uy = dy / d
        s = sp.sign(r)
        xc = xm - s * h * uy
        yc = ym + s * h * ux
        return xc, yc

    xcA, ycA = get_circle_center(Ax1, Ay1, Ax2, Ay2, Ar)

    # 2. 直線Bの単位方向ベクトル (ux, uy)
    vx = Bx2 - Bx1
    vy = By2 - By1
    L = sp.sqrt(vx**2 + vy**2)
    ux = vx / L
    uy = vy / L

    # 3. 垂線の足 M(xM, yM) の座標(1点で接するときの交点座標)
    d_proj = (xcA - Bx1) * ux + (ycA - By1) * uy
    xM = Bx1 + d_proj * ux
    yM = By1 + d_proj * uy

    return xM, yM


# --- Symbol定義 ---
Ax1, Ay1, Ax2, Ay2, Ar = sp.symbols("Ax1 Ay1 Ax2 Ay2 Ar", real=True)
Bx1, By1, Bx2, By2 = sp.symbols("Bx1 By1 Bx2 By2", real=True)

# --- 計算実行 ---
xM, yM = calculate_arc_line_intersection_tangent(
    Ax1, Ay1, Ax2, Ay2, Ar, Bx1, By1, Bx2, By2
)

# --- 出力 (Print文) ---
print("=== 1点交差(接線)時の交点座標 (xM, yM) ===")
print("xM =", xM)
print("yM =", yM)

計算結果 (横スクロールして見て下さい。)

=== 1点交差(接線)時の交点座標 (xM, yM) ===
xM = Bx1 + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2)
yM = By1 + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2)

接時の「1点専用」ではなく、2点交差・1点接する・0点(離れている)を自動判定して出力する単一のスクリプトと出力結果にまとめました。

# SymPyを用いた円弧と直線の交点計算スクリプト
import sympy as sp


def calculate_arc_line_intersections(
    Ax1, Ay1, Ax2, Ay2, Ar, Bx1, By1, Bx2, By2
):
    """円弧A (Ax1, Ay1)-(Ax2, Ay2) [半径 Ar] と

    直線B (Bx1, By1)-(Bx2, By2) の交点を計算する関数
    """

    # 1. 円弧Aの円心座標 (xcA, ycA)
    def get_circle_center(x1, y1, x2, y2, r):
        xm = (x1 + x2) / 2
        ym = (y1 + y2) / 2
        dx = x2 - x1
        dy = y2 - y1
        d = sp.sqrt(dx**2 + dy**2)
        r_abs = sp.Abs(r)
        h = sp.sqrt(r_abs**2 - (d / 2) ** 2)
        ux = dx / d
        uy = dy / d
        s = sp.sign(r)
        xc = xm - s * h * uy
        yc = ym + s * h * ux
        return xc, yc

    xcA, ycA = get_circle_center(Ax1, Ay1, Ax2, Ay2, Ar)
    rA_abs = sp.Abs(Ar)

    # 2. 直線Bの単位方向ベクトル (ux, uy)
    vx = Bx2 - Bx1
    vy = By2 - By1
    L = sp.sqrt(vx**2 + vy**2)
    ux = vx / L
    uy = vy / L

    # 3. 垂線の足 M(xM, yM) の座標(接する場合の交点)
    d_proj = (xcA - Bx1) * ux + (ycA - By1) * uy
    xM = Bx1 + d_proj * ux
    yM = By1 + d_proj * uy

    # 4. 判別式 (disc_val = r^2 - d^2) とオフセット距離 h_int
    dist_sq = (xM - xcA) ** 2 + (yM - ycA) ** 2
    disc_val = rA_abs**2 - dist_sq
    h_int = sp.sqrt(disc_val)

    # 5. 2点交差時の交点1・交点2
    x1 = xM + h_int * ux
    y1 = yM + h_int * uy
    x2 = xM - h_int * ux
    y2 = yM - h_int * uy

    # 6. Piecewiseによる条件分岐(リストではなく sp.Tuple を使用してエラーを回避)
    intersections_piecewise = sp.Piecewise(
        (sp.Tuple((x1, y1), (x2, y2)), disc_val > 0),  # 2点で交わる場合
        (sp.Tuple((xM, yM)), sp.Eq(disc_val, 0)),  # 1点で接する場合
        (sp.Tuple(), True),  # 離れている場合 (0点)
    )

    return intersections_piecewise, (x1, y1), (x2, y2), (xM, yM)


# --- 実行とSymbol定義 ---
Ax1, Ay1, Ax2, Ay2, Ar = sp.symbols("Ax1 Ay1 Ax2 Ay2 Ar", real=True)
Bx1, By1, Bx2, By2 = sp.symbols("Bx1 By1 Bx2 By2", real=True)

intersections_p, (x1, y1), (x2, y2), (xM, yM) = (
    calculate_arc_line_intersections(
        Ax1, Ay1, Ax2, Ay2, Ar, Bx1, By1, Bx2, By2
    )
)

# --- Print文 ---
print("=== 条件分岐式 (Piecewise) の出力 ===")
print(intersections_p)

計算結果 (横スクロールして見て下さい。)

=== 条件分岐式 (Piecewise) の出力 ===
Piecewise((((Bx1 + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-Bx1 + Bx2)*sqrt(Ar**2 - (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 - (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2)/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2), By1 + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*sqrt(Ar**2 - (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 - (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2)/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2)), (Bx1 + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) - (-Bx1 + Bx2)*sqrt(Ar**2 - (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 - (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2)/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2), By1 + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) - (-By1 + By2)*sqrt(Ar**2 - (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 - (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2)/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))), -Ar**2 + (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 + (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 < 0), (((Bx1 + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2), By1 + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2)),), Eq(-Ar**2 + (-Ax1/2 - Ax2/2 + Bx1 + (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-Bx1 + Bx2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2 + (-Ay1/2 - Ay2/2 + By1 - (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2) + (-By1 + By2)*((-Bx1 + Bx2)*(Ax1/2 + Ax2/2 - Bx1 - (-Ay1 + Ay2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2) + (-By1 + By2)*(Ay1/2 + Ay2/2 - By1 + (-Ax1 + Ax2)*sqrt(Ar**2 - (-Ax1 + Ax2)**2/4 - (-Ay1 + Ay2)**2/4)*sign(Ar)/sqrt((-Ax1 + Ax2)**2 + (-Ay1 + Ay2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))/sqrt((-Bx1 + Bx2)**2 + (-By1 + By2)**2))**2, 0)), ((), True))

(本日の)Gemini先生への履歴

・以下は最終ではありません。やり直し。枝分かれ多数のため。

1. Print文はどこですか
2. 1点交点の場合は。まとめて
3. 専用は困ります。
4. エラーがでます。
5. TypeError: Argument must be a Basic object, not `list`
6. 上記の私の質問すべてから、Markdownのテキスト形式で、質問リストを出力して。追番を追加して。本質問も含めて。コピーできる形式で。空白行不要です。

いつもと違うおすすめです。

Qiita 内

wikipedia で

sympy doc

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?