・自作の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
・保護されていない通信
↓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のソースコード)
座標をすべて計算した結果をまとめます(上のコードの実行結果そのままです)。
...
必要でしたら 図のプロット や 形状の説明 も出しますのでお知らせください。
図のプロットを教えて下さい。
・補助円/補助線を追加
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にしました。

いつもの? 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
