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?

大人用「円と三角形(正解率1%未満)和歌山県公立入試2025年度 数学 大問4(3)だけ」を、計算はsympyで、作図はFreeCADでやった。(その1/2) YUUU0123 様

Last updated at Posted at 2025-12-04

・自作のFreeCADマクロは、これからです。

(その1/2) 本ページ YUUU0123 様
(その2/2) MAスカッと塾 様

・中学高校数学の範囲外、大人の?CADが含まれています。
 無視して下さい。得点になりません。
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面上に作図しました。
・CADオペレーター様なら、楽勝問題?(数値計算対応)だと思います。
・もしかしたら、??? ユウドウの(1)(2)も、奥が深いカモ。勉強中です。

オリジナル

Youtube

YUUU0123 様 (0:00〜6:21) いつもお世話になっております。
↓2025 和歌山県公立高校(正解率1%未満) FCの長さを求めよ
https://youtu.be/KLWpRrB6DNY

PDF

・保護されていない通信
↓30和歌山県 <R7年(2025年)全問PDF -(6)- > 大問4(3)だけ
http://homepage1.canvas.ne.jp/ynaka/R7PDF/30wakayama.pdf#page=7
<数学苦手な中学生,応援します 様内。いつもお世話になっております。
http://homepage1.canvas.ne.jp/ynaka/index.html

sympyのweb上での実行方法

SymPy Live Shellで。FreeCADのマクロは、以下で実行できません。
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7
 

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

ver0.1

・??? 丸写しです。勉強中。

# ver0.1
from sympy import *
AP=3*sqrt(2)/sqrt(2)       ;print("#",AP)
PB=3/sqrt(3)               ;print("#",PB)
AB=AP+PB                   ;print("#",AB)
FO=(AB/sqrt(3)).simplify() ;print("#",FO)
OC=AB
FC=FO+OC                   ;print("#",FC)
# 3
# sqrt(3)
# sqrt(3) + 3
# 1 + sqrt(3)
# 2*sqrt(3) + 4

ver0.2

・Youtubeのコメント様より

# ver0.2 
from sympy import *
var('R,OF',nonnegative=True)
CO=R
CF=(CO+OF).subs({OF:R/sqrt(3)}).simplify()  #;print(CF)
FC= CF    .subs({R:3+sqrt(3)}) .expand()     ;print("#",FC)
# 2*sqrt(3) + 4

ver0.3

・高校生なら、AからOBに垂線を下ろす。
 「展開された形」がでます。

・しつこくて、スミマセン。上のWolframAlphaと同じです。
・??? simplify() を2回
・deg→rad 変換の関数を忘れたので、Rationalです。

from sympy import *
R =3*sqrt(2)*sin(Rational(75,180)*pi)/sin(Rational(60,180)*pi)  # ;print(R)
FC=(R*(tan(Rational(30,180)*pi)+tan(Rational(45,180)*pi)).simplify()).simplify()
print("#",FC)
# 2*sqrt(3) + 4

ver1.1 と ver1.2 は(その2/2)で。

sympyで(いつもの方法で)

ver2.1

・連立方程式にしなくてもです。点Oを原点です。

# ver2.1
from sympy import *
var('r,FC',nonnegative=True)
O,A,B,C,D=map(Point,[(0,0),(r*cos(120/180*pi),r*sin(120/180*pi)),(-r,0),(0,-r),(r,0)])
E        =Line(B,D).intersection(Line(A,C))[0]    #;print(E)
F        =Line(A,D).intersection(Line(C,O))[0]    #;print(F)
FC       =sqrtdenest(solve([Eq(A.distance(E),3*sqrt(2)),  \
                            Eq(F.distance(C),FC       )], \
                           [r,FC])[0][1]                ).simplify() ;print("#",FC)
# 2*sqrt(3) + 4

ver2.2

・ver2.1と同じ。方程式。普通はコチラかも。

# ver2.2
from sympy import *
var('r',nonnegative=True)
O,A,B,C,D=map(Point,[(0,0),(r*cos(120/180*pi),r*sin(120/180*pi)),(-r,0),(0,-r),(r,0)])
E        =Line(B,D).intersection(Line(A,C))[0]    #;print(E)
F        =Line(A,D).intersection(Line(C,O))[0]    #;print(F)
r_sol    =solve(Eq(A.distance(E),3*sqrt(2)),r)[0] #;print(r_sol)
print("#",sqrtdenest(F.distance(C).subs({r:r_sol})).simplify())
# 2*sqrt(3) + 4

ver2.3

・大人は? 単位円との比 で考える。 CADオペレーター風です。

# ver2.3
from sympy import *
r=1 #var('r',nonnegative=True)
O,A,B,C,D=map(Point,[(0,0),(r*cos(120/180*pi),r*sin(120/180*pi)),(-r,0),(0,-r),(r,0)])
E        =Line(B,D).intersection(Line(A,C))[0]    #;print(E)
F        =Line(A,D).intersection(Line(C,O))[0]    #;print(F)
print("#",(F.distance(C)*3*sqrt(2)/sqrtdenest(A.distance(E))).simplify())
# 2*sqrt(3) + 4

(本日の)ChatGPT先生へ

以下の座標図を教えて下さい。
(表示省略:ver2.2のソースコード)

座標をすべて計算した結果をまとめます(上のコードの実行結果そのままです)。
...
必要でしたら 図のプロット や 形状の説明 も出しますのでお知らせください。

図のプロットを教えて下さい。
・補助円/補助線を追加 

image.png

FreeCADのマクロを教えて下さい。

(回答省略)

??? 困った。

# 質問リスト
1. 座標図を書くための FreeCAD のマクロを教えて下さい。点記号を表示して下さい。
2. <class 'TypeError'>: make_text() got an unexpected keyword argument 'point' がでます。
3. Wrong input: must be a placement, a vector, or a rotation. がでます。
4. 文字しか表示されません。完全版で。
5. 文字を小さくして、円も追加して下さい。
6. 上記で文字を小さくして。
7. fontsize=1 で。
8. shape color なしで。
9. 私の質問を Markdown 形式でリスト化して出力して。Markdown 形式でリストからアスタリスクは削除して。1 行目に「# 質問リスト」を出力して。最後の質問も追加して下さい。

✅ FreeCAD マクロ(shape color なし / fontsize=1 / 点表示 / 補助円)

import FreeCAD as App
import FreeCADGui as Gui
import Draft
import math

doc = App.ActiveDocument
if doc is None:
    doc = App.newDocument("CoordPlot")

# ================================
# データ定義
# ================================
r = 6  # 必要に応じて変更

O = App.Vector(0, 0, 0)
A = App.Vector(r*math.cos(math.radians(120)), r*math.sin(math.radians(120)), 0)
B = App.Vector(-r, 0, 0)
C = App.Vector(0, -r, 0)
D = App.Vector(r, 0, 0)

# ---- 交点計算 ----
def line_intersection(P1, P2, P3, P4):
    x1,y1 = P1.x, P1.y
    x2,y2 = P2.x, P2.y
    x3,y3 = P3.x, P3.y
    x4,y4 = P4.x, P4.y
    D = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)
    if abs(D) < 1e-9:
        return None
    px = ((x1*y2 - y1*x2)*(x3-x4) - (x1-x2)*(x3*y4 - y3*x4)) / D
    py = ((x1*y2 - y1*x2)*(y3-y4) - (y1-y2)*(x3*y4 - y3*x4)) / D
    return App.Vector(px, py, 0)

E = line_intersection(B, D, A, C)
F = line_intersection(A, D, C, O)

# ================================
# 点描画(点=小円 + テキスト)
# ================================
def draw_point(v, name):
    # 小円
    Draft.makeCircle(0.15, placement=App.Placement(v, App.Rotation()))

    # テキスト(色指定なし)
    t = Draft.makeText([name], v + App.Vector(0.2, 0.2, 0))

    # 文字サイズを後から設定
    t.ViewObject.FontSize = 1


# ================================
# 線を描画(色指定なし)
# ================================
def draw_line(v1, v2):
    Draft.makeLine(v1, v2)


# ---- 点 ----
draw_point(O, "O")
draw_point(A, "A")
draw_point(B, "B")
draw_point(C, "C")
draw_point(D, "D")
draw_point(E, "E")
draw_point(F, "F")

# ---- 線 ----
draw_line(O, A)
draw_line(O, B)
draw_line(O, C)
draw_line(O, D)
draw_line(A, C)
draw_line(B, D)
draw_line(A, D)
draw_line(C, O)

# ---- 補助円(色指定なし) ----
Draft.makeCircle(r, placement=App.Placement(O, App.Rotation()))

doc.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")

・circleのTransparency を100にしました。
000.png

いつもの? FreeCADのマクロで作図

感想

Youtubeのコメント様より。

順番にいくと、
前半。半径Rで、円周角とダブル三平方の変形?でした。
後半。ダブル三平方の変形?でした。

正解率1%未満の受験生は、2枚の三角形定規(60度と45度)の組合せが
「ひと目で3箇所」円の中に見えていたカモ。
???円を消す。
①△ABDと△CBD
②△ABEの中(△PBEと△PAE)補助線EP
③△OFDと△OCD

ステキな問題です。2枚の三角形定規の連結(貼り合わせ)

全部で3x3=9パターンの内
全部で3x2=6パターンの内の
「2パターンの登場」 でした。
以下、角度と角度の間の連結部分の線の意味です。
①60度30度 と 45度45度
②90度30度 と 90度45度
③  〃
登場していないのは、あと4つ。
・60度30度 と 90度45度
・90度30度 と 45度45度(三角定規サイズ)???これ
・90度60度 と 90度45度
・90度60度 と 45度45度
他県の入試問題にありそうです。
アドバイスいただけると助かります。

△ABEは、業界?で有名な三角形のようです。(カンニング済)
45°65°75°(=180°-45°-60°)
続きは、その2で。

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

(テンプレート)

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

・いつも途中で申し訳ありません。 ひとつづつ終わらせるべきと思います。

データ分析の上限に達しました。さらにご利用を続けるには無料の Plus をお試しください. もしくは、明日の 19:33 以降に制限がリセットされるまでお待ちください。

sympy のdoc

ver0.1

ver0.2

ver2.0

・sympy.simplify.sqrtdenest.sqrtdenest(expr, max_iter=3)
https://docs.sympy.org/latest/modules/simplify/simplify.html#sympy.simplify.sqrtdenest.sqrtdenest

ver2.1

ver2.2

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?