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?

大人用です。三角形の中の三角形の面積「高校入試チャレンジ問題 △ABFの面積は?」様を、計算はsympyで作図は手抜きのつもりでした。

0
Last updated at Posted at 2026-09-19

・>...小学生でも簡単に解けます。...
 シマッタ。(?翻訳 Gemini該当無しで。)
・(2026-09-26) ver3.1 Triangle.intersection(Triangle) をGemini先生に教えてもらいました。

オリジナル

YUUU0123 様 (0:00〜2:52) いつもお世話になっております。
↓高校入試チャレンジ問題 △ABFの面積は?
https://youtu.be/PblHbZxoTQ0

いつものsympyで(オリジナル Youtbe様の方法を参考に)

ver0.1

・先生の丸写しです。図形の証明は省略です。
・補助線1本 FCでした。

# ver0.1
from sympy import *
BE,EC,CD,DA=2,3,3,2                          
DBC =(BE+EC)*CD*Rational(1,2)     ;print("#",DBC)
AFBC=DBC*Rational(10,8)           ;print("#",AFBC)    
ABC =(BE+EC)*(CD+DA)*Rational(1,2)
S   =ABC-AFBC 
print("#",S)
# 15/2
# 75/8
# 25/8

いつもの sympyで

ver1.1

・(私だけ?)大人は得意技です。点B(0,0)の原点です。
・Triangle は Polygon の subclass (のハズ?) です。

# ver1.1
from sympy import *
BE,EC,CD,DA=2,3,3,2                          
B,E,C,D,A=map(Point,[(0,0),(BE,0),(BE+EC,0),(BE+EC,CD),(BE+EC,CD+DA)])
F        =Line(B,D).intersection(Line(E,A))[0]
print("#",Triangle(A,B,F).area)
print("#",Polygon (A,B,F).area)
# 25/8
# 25/8

ver2.1

・Gemini先生へ。

以下を、geometry モジュールを使わないソースコードを教えて下さい。一次関数でしょうか。計算結果も出力して下さい。

・(最初、?サラスの公式がでていました。)
・(最初、?間違っています。) >大変失礼いたしました。計算の過程を改めて確認いたしました。...

# ver2.1
from sympy import Abs, Symbol, solve

# 各線分の長さ
BE, EC, CD, DA = 2, 3, 3, 2

# 各点の座標 (x, y)
# B=(0,0), E=(2,0), C=(5,0), D=(5,3), A=(5,5)

# 1. 一次関数の作成
x = Symbol('x')
y_BD = (3 / 5) * x
y_EA = (5 / 3) * (x - 2)

# 2. 交点 F の座標算出
x_F = solve(y_BD - y_EA, x)[0]
y_F = y_BD.subs(x, x_F)

# 3. △ABF の面積計算 (△ABD - △FAD)
# 底辺 AD = 2
area_ABD = 2 * 5 / 2
area_FAD = 2 * (5 - x_F) / 2
area_ABF = area_ABD - area_FAD

print("#", area_ABF)
# 25/8

誤りの原因と手計算での検証...

そこまでしなくても。です。?(本日は)それでも間違っていました。

ver3.1

・Gemini先生へ。

SymPyの intersection() メソッドで取得できる交差領域(Polygonオブジェクト)から面積を求めるか、または交点 F を計算して三角形 ABF の面積(ABF 変数)を直接求める形式に仕上げるのが適切です。...

# SymPyの交差結果から汎用的に図形オブジェクトおよび面積を取得する関数

from sympy import *

def extract_geometry_from_intersection(intersection_result):
    """
    SymPyの intersection() 結果(Polygon, Triangle, Point, Segment の組み合わせ)
    から、交差領域の図形(Polygon / Triangle)を汎用的に抽出・再構築する関数。
    
    Returns:
        tuple: (geometry_object, area)
               交差部分がない場合は (None, 0) を返す
    """
    # 1. 渡された値が単一オブジェクトの場合、リストに正規化
    if not isinstance(intersection_result, (list, tuple, FiniteSet)):
        items = [intersection_result]
    else:
        items = list(intersection_result)

    if not items:
        return None, S.Zero

    # 2. すでに Polygon / Triangle が直接含まれている場合
    polygons = [obj for obj in items if isinstance(obj, Polygon)]
    if polygons:
        poly = polygons[0]
        return poly, poly.area

    # 3. Point群とSegment群から面(Polygon/Triangle)を再構築する場合
    points = [obj for obj in items if isinstance(obj, Point)]
    segments = [obj for obj in items if isinstance(obj, Segment)]

    # Segmentの全端点と孤立したPointを抽出して重複を除去
    all_vertices = []
    for seg in segments:
        all_vertices.extend([seg.p1, seg.p2])
    all_vertices.extend(points)

    # 座標の重複を排除(順序を維持)
    unique_vertices = []
    for pt in all_vertices:
        if pt not in unique_vertices:
            unique_vertices.append(pt)

    # 頂点が3つ以上あれば多角形(3つの場合はTriangle、それ以上はPolygon)を作成
    if len(unique_vertices) == 3:
        tri = Triangle(*unique_vertices)
        return tri, tri.area
    elif len(unique_vertices) > 3:
        poly = Polygon(*unique_vertices)
        return poly, poly.area

    # 面を構成しない場合(線や点のみ、または空)
    return None, S.Zero


# ---- 動作確認 ----
var('ABF', real=True, positive=True)
BE, EC, CD, DA = 2, 3, 3, 2
B, E, C, D, A = map(Point, [(0, 0), (BE, 0), (BE + EC, 0), (BE + EC, CD), (BE + EC, CD + DA)])

# 交差領域の計算
intersection_result = Triangle(A, B, E).intersection(Triangle(A, B, D))

# 汎用関数で抽出
geo_obj, area_val = extract_geometry_from_intersection(intersection_result)

print("抽出された図形:", geo_obj)
print("図形クラス名:", type(geo_obj).__name__ if geo_obj else "None")
print("面積:", area_val)

計算結果

抽出された図形: Triangle(Point2D(5, 5), Point2D(0, 0), Point2D(25/8, 15/8))
図形クラス名: Triangle
面積: 25/8

(続けて)Gemini先生へ。

上記ののPNG図のみ出力して下さい。

matplotlib のところ、無視して、「PNG図をだけ」
「上記の...」でした。一次関数の作図でした。ステキ。

image.png

いつもの? sympyの実行環境 と 参考のおすすめです。

sympyのweb上での実行方法

SymPy Live Shellで。
ソースコードの解説は、私よりGemini先生へのソースコードの丸投げがおすすめです。質問の追加はいくらでも。
モーダル対応?「実行して」。「作図して」「問題文章の丸投げ」いい時代です。

(テンプレート)

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

sympy のdoc

・いらないカモ。

ver0.1

ver1.1

・property area < Triangle < Polygon
https://docs.sympy.org/latest/modules/geometry/polygons.html#sympy.geometry.polygon.Polygon.area

ver1.2

ver2.1

AIによる概要

Youtubeのコメント様より。
「天秤法(てんびん法・てんびん算)」は、主に中学受験の算数や数的推理において、食塩水の濃度や平均値を視覚的に素早く解くために使われるテクニック(解法)です。

ver3.1

後記

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

・後出しで、私の言い訳です。気をつけて確認しているつもりです。
 お気づきがあれば、アドバイスいただけると幸いです。

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?