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?

More than 1 year has passed since last update.

角の二等分線「2023 富山大学前期経済,教育学部【3】」をsympyとFreeCADでやってみたい。

Last updated at Posted at 2023-08-10

・余弦定理でやりました。直角は使っていません。
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面上に作図しました。
 いつものベクトルの成分表示?です。
・>中3の平行線と線分の比の単元で, 角の二等分線と線分の比も学習します。
 >角の二等分線についての確認問題です.
 中3?シマッタ。私は勉強不足です。
 後日? 2等辺三角形の勉強後,「角の二等分線」について、新規投稿予定。

オリジナル
youtube 4:29 せ〜ちゃんねる [ゆる〜い] 様

T氏の数学日記 様

上と同じです。大学入試数学問題集成>テキスト経済,教育学部【3】

sympyで(オリジナル様の方法で)

勉強中。直角二等辺三角形でした。

sympyで(cosθの余弦定理です。)

余弦定理の連立方程式です。
(2023/08/11)
cos(2θ) → 2cos(θ)**2-1 は、カンニングしました。いい方法を教えて下さい。

# 旧プログラム
from sympy import *
cosθ   =symbols('cosθ'  ,real=True,nonnegative=True)
PA,PB  =symbols('PA,PB',real=True,nonnegative=True)
PC     =Rational(136,23)
(AB,AC)=(15,8)
my_ABC=Eq(AB**2+AC**2-2*AB*AC*(2*cosθ**2-1),(PB+PC)**2)
my_ABP=Eq(AB**2+PA**2-2*AB*PA*cosθ         , PB    **2)
my_ACP=Eq(AC**2+PA**2-2*AC*PA*cosθ         , PC    **2)
ans=solve([my_ABC,my_ABP,my_ACP],[PA,PB,cosθ])
print("#(1) ",ans[1][1])
print("#(2) ",Triangle(sss=(AB,(ans[1][1]+PC),AC)).area)
#(1)  255/23
#(2)  60

(2023/08/11)
コメント欄より,expand_trigを追加しました。ありがとうございました。
https://www.geeksforgeeks.org/python-sympy-expand_trig-method-2/

# 修正済みプログラム(2023/08/11)
from sympy import *
θ,cosθ =symbols('θ,cosθ',real=True,nonnegative=True)
PA,PB  =symbols('PA,PB' ,real=True,nonnegative=True)
(PC   )=(Rational(136,23))
(AB,AC)=(15,8)
my_ABC=Eq(AB**2+AC**2-2*AB*AC*cos(2*θ),(PB+PC)**2)
my_ABP=Eq(AB**2+PA**2-2*AB*PA*cos(  θ), PB    **2)
my_ACP=Eq(AC**2+PA**2-2*AC*PA*cos(  θ), PC    **2)
# 
mySubs={cos(θ):cosθ}
my_ABC=expand_trig(my_ABC).subs(mySubs)
my_ABP=            my_ABP .subs(mySubs)
my_ACP=            my_ACP .subs(mySubs)
#
ans=solve([my_ABC,my_ABP,my_ACP],[PA,PB,cosθ])
print("#(1) ",ans[1][1])
print("#(2) ",Triangle(sss=(AB,(ans[1][1]+PC),AC)).area)
#(1)  255/23
#(2)  60

sympyで(θの余弦定理で、できませんでした。)

以下のプログラムは終了しません。当初です。そんなに甘くありませんでした。

from sympy import *
θ      =symbols('θ'     ,real=True,nonnegative=True)
PA,PB  =symbols('PA,PB',real=True,nonnegative=True)
PC     =Rational(136,23)
(AB,AC)=(15,8)
my_ABC=Eq(AB**2+AC**2-2*AB*AC*cos(2*θ),(PB+PC)**2)
my_ABP=Eq(AB**2+PA**2-2*AB*PA*cos(  θ), PB    **2)
my_ACP=Eq(AC**2+PA**2-2*AC*PA*cos(  θ), PC    **2)
ans=solve([my_ABC,my_ABP,my_ACP],[PA,PB,θ])
print(ans)
# 終了しません。

FreeCADのマクロで作図

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

import FreeCAD
import Part
import DraftTools
import Draft
import Mesh
############################################################################
# 計算
from sympy import *
θ,cosθ  =symbols('θ,cosθ',real=True,nonnegative=True)
PA,PB  =symbols('PA,PB' ,real=True,nonnegative=True)
(PC   )=(Rational(136,23))
(AB,AC)=(15,8)
my_ABC=Eq(AB**2+AC**2-2*AB*AC*cos(2*θ),(PB+PC)**2)
my_ABP=Eq(AB**2+PA**2-2*AB*PA*cos(  θ), PB    **2)
my_ACP=Eq(AC**2+PA**2-2*AC*PA*cos(  θ), PC    **2)
# 
mySubs={cos(θ):cosθ}
my_ABC=expand_trig(my_ABC).subs(mySubs)
my_ABP=            my_ABP .subs(mySubs)
my_ACP=            my_ACP .subs(mySubs)
#
ans=solve([my_ABC,my_ABP,my_ACP],[PA,PB,cosθ])
print("#(1) ",ans[1][1])
print("#(2) ",Triangle(sss=(AB,(ans[1][1]+PC),AC)).area)
#(1)  255/23
#(2)  60
############################################################################
# 作図用
myT=Triangle(sss=((ans[1][1]+PC),AC,AB))
A=myT.args[2]
B=myT.args[0]
C=myT.args[1]
P=Point(ans[1][1],0)
############################################################################
# 3D作図 z=0 XY平面に作図しました。
############################################################################
def myXYZ2Txt_2D(A):
    return '(' + str(A.x) + ',' + str(A.y) +  ')'
    #return ""
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.7 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 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_C_2D(*args):
    for i in range(1,len(args)):
        myLine_2D(args[i-1],args[i])
    myLine_2D(args[i],args[0])
    return
#######################################################################################
myLine_C_2D  ( A,B,C )
myLine_2D    ( A,P )
myTxtXYZ_S_2D( A,"A",B,"B",C,"C",P,"P" )
#######################################################################################
doc = App.activeDocument()
App.ActiveDocument.addObject("App::Origin", "Origin")
App.ActiveDocument.getObject('Origin').Visibility = True
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")

isometric方向?です。

0png.png

上空から?です。
マウス操作で、Originは、非表示。
寸法表示の勉強中です。

1png.png

sympyの実行環境

①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
??? タブレット環境で、コピー貼り付けが実行できませんでした。???

参考

>中3の平行線と線分の比の単元で, 角の二等分線と線分の比も学習します。

以下、いつもの?おすすめです。

0
0
1

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?