正方形の左下に正方形「高校入試頻出問題 正方形ABCDの面積は？」をsympyとFreeCADでやってみたい。


・問題文は2次元ですが、３次元FreeCADのマクロで、XY平面上に作図しました。

# オリジナル
・YUUU0123 様 (0:00〜4:41) 

https://youtu.be/yecFYBWIWkI

# sympyで(オリジナル 様の方法を参考に)
#### ver0.1 ＞相似比は,5:8となります。... 
```python
# ver0.1 ＞相似比は,5:8となります。... 
from sympy import *
var('a',real=true,positive=true)
print("#",(8*solve( Eq((5*a)**2+(3*a)**2,5**2),a)[0])**2)
# 800/17
```
# sympyで(いつもの方法で)
#### できませんでした。ver0.2 正方形をフル活用です。。
```python
# できませんでした。ver0.2 正方形をフル活用です。 
from sympy import *
var('x,t',real=true,positive=true)
B,C=map(Point,[(0,0),(x,0)])                                                                        ;print("#",B)
G=C+Point(5*cos(t),5*sin(t))
H=G+Point(3*cos(t),3*sin(t))
sol=solveset([Eq(G.x,G.y),Eq(C.x,H.y)],t,Interval(pi/2,pi))
print(sol)
# ValueError: [Eq(x + 5*cos(t), 5*sin(t)), Eq(x, 8*sin(t))] is not a valid SymPy expression
```
#### ver0.3　できませんでした。ver0.3 正方形をフル活用です。 
```python
# できませんでした。ver0.3 正方形をフル活用です。 
from sympy import *
var('x,t',real=true,positive=true)
B,C=map(Point,[(0,0),(x,0)])         
G  =C+Point(5*cos(t),5*sin(t))             ;print("#",G)
H  =G+Point(3*cos(t),3*sin(t))             ;print("#",H)
sol=solve([Eq(G.x,G.y),Eq(C.x,H.y)],[t,x]) ;print("#",G.x,G.y,C.x,H.y) 
print("#",sol)
# Point2D(x + 5*cos(t), 5*sin(t))
# Point2D(x + 8*cos(t), 8*sin(t))
# x + 5*cos(t) 5*sin(t) x 8*sin(t)
# []
```
#### ver0.4　sympyの連立方程式の調子？が悪いため。ver0.4 正方形をフル活用です。
```python
# sympyの連立方程式の調子？が悪いため。ver0.4 正方形をフル活用です。 
from sympy import *
var('x,t',real=true,positive=true)
B,C=map(Point,[(0,0),(x,0)])         
G  =C+Point(5*cos(t),5*sin(t))       
H  =G+Point(3*cos(t),3*sin(t))       
sol1=solve   (Eq(C.x,H.y),x)[0] 
sol2=solveset(Eq(G.x.subs({x:sol1}),G.y.subs({x:sol1})),t,Interval(pi/2,pi)).args[0]
print("#",sol2)
print("#",sol1.subs({t:sol2}))
print("#",sol1.subs({t:sol2})**2)
# pi - atan(5/3)
# 20*sqrt(34)/17
# 800/17
```
# FreeCADのマクロで作図
・問題文は2次元ですが、３次元FreeCADのマクロで、XY平面に作図しました。
・計算部分は、Ver.0.4 の コピー貼り付けです。
```python
import FreeCAD
import Part
import DraftTools
import Draft
import Mesh
############################################################################
# sympyの連立方程式の調子？が悪いため。ver0.4 正方形をフル活用です。。 
from sympy import *
var('x,t',real=true,positive=true)
B,C=map(Point,[(0,0),(x,0)])         
G  =C+Point(5*cos(t),5*sin(t))       
H  =G+Point(3*cos(t),3*sin(t))       
sol1=solve   (Eq(C.x,H.y),x)[0] 
sol2=solveset(Eq(G.x.subs({x:sol1}),G.y.subs({x:sol1})),t,Interval(pi/2,pi)).args[0]
print("#",sol2)
print("#",sol1.subs({t:sol2}))
print("#",sol1.subs({t:sol2})**2)
############################################################################
rep={t:sol2,x:sol1.subs({t:sol2})}
A=Point(0,x)    .subs(rep)
C=C             .subs(rep)
D=Point(x,x)    .subs(rep)
E=Point(B.x,G.y).subs(rep)
F=Point(G.x,B.y).subs(rep)
G=G             .subs(rep)
H=H             .subs(rep)
############################################################################
# 3D作図 z=0 XY平面に作図しました。
############################################################################
def myXYZ2Txt_2D(A):
    return ""
def myXYZ2Txt_XY_2D(A):
    return '(' + str(A.x) + ',' + str(A.y) +  ')'
def myTxtXYZ_2D(A,myWedgei):
    P5x=float(A.x)
    P5y=float(A.y)
    P5z=0.0
    p5 = FreeCAD.Vector(P5x, P5y, P5z)
    myText = Draft.makeText(myWedgei, p5)
    myText.Label = myWedgei
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.5 mm'
    # FreeCADGui.ActiveDocument.ActiveObject.FontSize = '1.0 mm'
    # FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.5 mm'
    return
def myTxtXYZ_S_2D(*xy_tx):
    for i in range(1,int(len(xy_tx)/2)+1):
        myTxtXYZ_2D(xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt_2D(xy_tx[2*i-2]) )
    return
def myTxtXYZ_XY_S_2D(*xy_tx):
    for i in range(1,int(len(xy_tx)/2)+1):
        myTxtXYZ_2D(xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt_XY_2D(xy_tx[2*i-2]) )
    return
def myLine_2D(A,B):
    Ax,Ay,Az=float(A.x),float(A.y),0.0
    Bx,By,Bz=float(B.x),float(B.y),0.0
    pl = FreeCAD.Placement()
    pl.Rotation.Q = (0.4247081540122249, 0.17592004639554645, 0.33985110062924484, 0.8204732460821097)
    pl.Base = FreeCAD.Vector(-3.9166066876399563, -2.1670824762243774, 1.7495260956243028)
    points = [FreeCAD.Vector(Ax,Ay,Az), FreeCAD.Vector(Bx,By,Bz)]
    line = Draft.make_wire(points, placement=pl, closed=False, face=True, support=None)
    Draft.autogroup(line)
    return
def myLine_S_2D(*args):
    for i in range(1,len(args)):
        myLine_2D(args[i-1],args[i])
    return
def myLine_C_2D(*args):
    for i in range(1,len(args)):
        myLine_2D(args[i-1],args[i])
    myLine_2D(args[i],args[0])
    return
def myLine_H_2D(*args):
    for i in range(1,len(args)):
        myLine_2D(args[0],args[i])
    return
##################################################################################
myLine_C_2D     (A,B,C,D)  
myLine_S_2D     (C,G,H)  
myLine_S_2D     (E,G,F)  
myTxtXYZ_XY_S_2D(A,"A",B,"B",C,"C",D,"D")
myTxtXYZ_XY_S_2D(E,"E",F,"F",G,"G",H,"H")
####################################################################################
doc = App.activeDocument()
#App.ActiveDocument.addObject("App::Origin", "Origin")
#App.ActiveDocumen!t.getObject('Origin').Visibility = True
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
```
isometric方向?です。(省略)
拡大図
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/92327f3e-b9d4-373a-25ad-0d5d1bc4d207.png)

拡大図(CADの操作で寸法線を追加)
・(別件)FreeCADの再インストールを、~~昨日~~先日したものだから、操作が若干ビミョーです。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/157f7108-63f9-f952-fcaf-f5544952b461.png)

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

・以下ができたら、助かります。指定と全部です

https://qiita.com/mrrclb48z/items/555d85face87552c34fb

https://qiita.com/mrrclb48z/items/5f57eac92aaca30e85c0

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