・円弧と直線の交点計算の公式? を覚えている人はいないと思う。
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
・