・小学生のみなさんは、小学校でほとんど習わない内容を含むので、
高校生のお兄さんお姉さんに聞いて下さい。
PDF問題文【8】 と本投稿の最後の節 「終わってから大ヒーント」だけでも
読んでいただけると、幸いです。
・続編(その2)を作成中です。
(共通テストで登場されている)太郎さんと花子さんの会話のパクリ編???予定です。
・私ができなかったプログラムも、そのまま載せています。
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面上に作図しました。
・パイソニスタの方へ
(再)最後の角度の計算について、私は勉強中です。
sin20 sin40 cos40
https://qiita.com/mrrclb48z/items/62a90fce3dc5aef2fa16
(新)どなたか、ソルバー(エクセルのソルバーを含む) でチャレンジをお願いします。2,3行で???
オリジナル
・PDF 最終問題【8】、2ページ目右下
https://www.yotsuyaotsuka.com/chugaku_kakomon/pc/uploadPdfs/130/2024/sansu-mondai.pdf#page=2
・解答 ameblo
らふわく 様ありがとうございます。(amebloのログイン勉強中)
私は 【解法1】 のみ、理解できました。
https://ameblo.jp/daigorobe/entry-12839262042.html
・解答
以下のyoutubeを繰り返し見て勉強しました。ありがとうございました。
(0:00〜10:54) 解説 3:30〜
youtube 他多数
対称性でもできるそうです。私は理解できませんでした。
sympyで(オリジナル 様の方法で)
・ver0.1
# ver0.1
from sympy import *
var('BE,BC,AD',real=True,nonnegative=True)
print("#",solve([Eq(BC-AD,5),Eq(BC,BE+BE+(BE+AD))],[BE,AD])[BE])
# 5/3
・ver0.2
プログラムでは、ありません。print文の羅列です。
いい方法がありますか。ver0.1に,Triangleをつけました。
>sympy docより
Triangle(*args, **kwargs)<Polygonsの特殊型???
https://docs.sympy.org/latest/modules/geometry/polygons.html#sympy.geometry.polygon.Triangle
# ver0.2
from sympy import *
var('BE' ,real=True,nonnegative=True)
var('AB,BC,AC,CD,AD,DE',real=True,nonnegative=True)
AC=AB
tABE=Triangle(asa=(20,AB,40))
tCDF=Triangle(asa=(20,CD,180-(180-20)*Rational(1,2)-60))
print("#","△ABE=△CDF",are_similar(tABE,tCDF))
print("#","AE=FC True")
degDEF=20+40
degEDF=60
print("#","degDEF,degEDF=",degDEF,degEDF )
print("#","BE=DF True")
print("#","BE=DF=EF True")
EF=DE=BE
AE=AD+DE
FC=AE
print("#",solve([Eq(BC-AD,5),Eq(BC,BE+EF+FC)],[BE,AD])[BE])
# △ABE=△CDF True
# AE=FC True
# degDEF,degEDF= 60 60
# BE=DF True
# BE=DF=EF True
# 5/3
sympyで(いつもの方法で)
>sympy docより
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html
・ver0.3
正弦定理を使っています。
BEの正弦定理から開始して,長さの差の方程式で終了です。
# ver0.3
from sympy import *
var('BE' ,real=True,nonnegative=True)
var('AB,BC,CA,CD,AD',real=True,nonnegative=True)
def sind(deg):
return sin(deg*pi/180)
AB=solve(Eq(BE/sind(20),AB/sind(120)),AB)[0]
BC=solve(Eq(AB/sind(40),BC/sind(100)),BC)[0]
CA=AB
AD=solve(Eq(CA/sind(80),AD/sind( 20)),AD)[0]
BE=solve(Eq(BC-AD ,5 ),BE)[0]
print("#",BE,float(BE))
# 積和の公式できていません。???
def myPrint(BE):
A=pi/9;B=2*pi/9;C=pi/18
return 40*sqrt(3)*simplify(Rational(1,2)*(cos(A-B)-cos(A+B))*cos(C))/9
print("#",myPrint(BE))
# 40*sqrt(3)*sin(pi/9)*sin(2*pi/9)*cos(pi/18)/9 1.6666666666666667
# 5/3
・ver0.4
できませんでした。 うまくいくと思ったんですけど。
やっぱりコレ。ベクトルで作図したいです。
# ver0.4 AB=AC=CD,BC-AD=5
from sympy import *
var('d',real=True,nonnegative=True)
def myUnitVector(v):
return Point(v.x/sqrt(v.x**2+v.y**2),v.y/sqrt(v.x**2+v.y**2) )
AB,AC,CD =d,d,d
degBAC,degDCA=100,20
degABC =Rational(1,2)*(180-degBAC)
#
A= AB*Point(cos( degABC *pi/180) ,sin( degABC *pi/180))
B= Point(0 ,0)
C= AB*Point(cos( degABC *pi/180)*2,0)
# 方向角で
# D=C+AB*Point(cos((180-degABC+degDCA)*pi/180) ,sin((180-degABC+degDCA)*pi/180))
# print(E)
# 単位ベクトルで
D =C+CD*myUnitVector( Rational(1,2)*( (A-C)+(B-C) ))
E =Line(B,C).intersection(Line(A,D))[0]
sol=solve(Eq(B.distance(C)-A.distance(D),5),d)[0]
print("#",sol,float(sol))
rep={d:sol}
B =B.subs(rep)
E =E.subs(rep)
print("#", B.distance(E) )
print("#",float(B.distance(E)) )
# TypeError: Cannot convert complex to float
FreeCADのマクロで作図
・BE=5/3で作図しています。
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面上に作図しました。
・いつもだと「マクロプログラムの計算部分は、コピーしています。」
今回は、座標計算部分は、新規作成です。 ver0.3の修正です。
import FreeCAD
import Part
import DraftTools
import Draft
import Mesh
############################################################################
# 新規計算
from sympy import *
var('BE' ,real=True,nonnegative=True)
var('AB,BC,CA,CD,AD',real=True,nonnegative=True)
def sind(deg):
return sin(deg*pi/180)
AB=solve(Eq(BE/sind(20),AB/sind(120)),AB)[0]
BC=solve(Eq(AB/sind(40),BC/sind(100)),BC)[0]
CA=AB
AD=solve(Eq(CA/sind(80),AD/sind( 20)),AD)[0]
BE=solve(Eq(BC-AD ,5 ),BE)[0]
print("#",BE,float(BE))
# 積和の公式できていません。???
def myPrint(BE):
A=pi/9;B=2*pi/9;C=pi/18
return 40*sqrt(3)*simplify(Rational(1,2)*(cos(A-B)-cos(A+B))*cos(C))/9
print("#",myPrint(BE))
print("------------------------------------------------------------------")
BE=myPrint(BE)
def myLineIntersection(a,dega,b,degb):
return Line(a,a+Point(cos(rad(dega)),sin(rad(dega)))).intersection(
Line(b,b+Point(cos(rad(degb)),sin(rad(degb)))) )[0]
B =Point(0 ,0)
E =Point(BE,0)
F =Point(BE*2,0)
A =myLineIntersection(B,40,E, 60)
C =myLineIntersection(B, 0,A,320)
D =myLineIntersection(E,60,C,160)
############################################################################
# 作図用
############################################################################
# 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.1 mm'
FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.3 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_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
#######################################################################################
myLine_C_2D (A,B,C)
myLine_S_2D (A,D,E)
myLine_S_2D (C,D)
myLine_S_2D (D,F)
myTxtXYZ_S_2D(A,"A",B,"B",C,"C" )
myTxtXYZ_S_2D(D,"D",E,"E",F,"F" )
#######################################################################################
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方向?です。
拡大図
拡大図(CADの操作で寸法線を追加)
いつもの? sympyの実行環境と 参考のおすすめです。
いつもと違うおすすめです。
終わってから大ヒーント
・ポイントは問題文にも、ありました。
一目で一本の補助線が浮かぶ人には、以下の説明は不要です。
BCとADの長さの差が5cmのとき、...
↓
CBとADの長さの差が5cmのとき、...
ADとCBの長さの差が5cmのとき、...
出題者の先生にヤラレタ感があります。
・「CBをAEに重ねるか。AEをCBに重ねるか」同じ事?
youtube様の考え。A〜D〜E〜F〜Bを展開図(貼れる)。Fで折れ点。
差とは何か。
私の考え。Fをもう一回伸ばして、新点Gもありかも。
AG=BC
ameba様の考え。AEをCBに重ねる。補助線1本だけいいですね~
・図を鉛直線で反転して、角度20°が左側だと、受験生にバレルかも???
・三角定規に目盛りがありましたか?
>考査に必要な筆記用具
>...定規(三角定規可)、...
参考図が、正確?なら、
AD,AEの長さを計って、辺CB上に点D'、点のE'のプロット作図ありかも。
https://www.tokai-jh.ed.jp/addmission/index2.html
(注意)平面図形の問題は、角度からがセオリー?だと思います。