長文です。再チャレンジです。今回作図しました。
ページ最後の私の感想 だけでも、読んでもらえれば幸いです。
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面上に作図しました。
オリジナル PASSLABO 様
(途中5:10〜12:46)
解法その1,2,3からです。図形問題のポイントをスキップしています。
https://youtu.be/49z7Nj22ugE?t=310 解法その1 5:10
https://youtu.be/49z7Nj22ugE?t=549 解法その2 9:09
https://youtu.be/49z7Nj22ugE?t=613 解法その3 10:13 (高校数学)
PASSLABO 様 (フル0:00〜12:46)
https://youtu.be/49z7Nj22ugE
sympyで
・ver0.21 その1 AB=3x,△AHB∽△AHB,△AHBと△AHBのAH共通 8:27
# ver0.21 その1 AB=3x,△AHB∽△AHB,△AHBと△AHBのAH共通 8:27
from sympy import *
var('x,y',positive=True)
print("#",solve([Eq(3*x,Rational(10,6)*(x+y)),Eq((3*x)**2-(x+y)**2,8**2-y**2)],[x,y])[0][0])
# sqrt(10)
・ver0.22 その1 AB=3x,△AHB∽△AHB,方べきの定理 8:34
from sympy import *
var('x,y',positive=True)
print("#",solve([Eq(3*x,Rational(10,6)*(x+y)),Eq(x*2*y,8*2)],[x,y])[0][0])
# sqrt(10)
・ver0.23 その2 AB=3x,△AHB∽△AHB,,∠BAH 角の二等分線の定理 9:10
# ver0.23 その2 AB=3x,△AHB∽△AHB,,∠BAH 角の二等分線の定理 9:10
from sympy import *
var('x,y,AH',positive=True)
sol =solve([Eq(3*x ,Rational(10,6)*(x+y)),Eq(3*x/x,AH/y)],[AH,y] )
print("#",solve( Eq(8**2,sol[AH]**2+sol[y]**2) ,[x] )[0])
# sqrt(10)
・ver0.24 その2 AB=3x,△BECは二等辺三角形,直角三角形△ABC 9:40
# ver0.24 その2 AB=3x,△BECは二等辺三角形,直角三角形△ABC 9:40
from sympy import *
var('x',positive=True)
print("#",solve( Eq(10**2,(3*x)**2+(x**2)),[x])[0])
# sqrt(10)
・ver0.25 その3 高校数学強さ 2倍角の定理 10:10
# ver0.25 その3 高校数学強さ 2倍角の定理 10:10
from sympy import *
var('x,θ',positive=True)
EH=8*sin(θ)
eq_baikaku=Eq(cos(2*θ),Rational(8,10))
eq_houbeki=Eq(x*2*EH,8*2)
print("#",solve([eq_baikaku,eq_houbeki],[x,θ])[0][0])
# sqrt(10)
オリジナル 高校入試虎の穴 様
>延長して交点F...
>角の二等分線
>AFは8√10/3...
https://youtu.be/Q8_S-LZGdjM?t=685 (途中11:25〜17:40)問4(1)からです。
https://youtu.be/Q8_S-LZGdjM?t=750 (途中12:30〜17:40)問4(2)(ア)からです。
高校入試虎の穴 様 (フル0:00〜22:41)
https://youtu.be/Q8_S-LZGdjM
sympyで
・ver0.3
・角の二等分線の定理
# ver0.3 高校入試虎の穴 様
from sympy import *
var('AH,degABD,degACD,degR,x',)
degABD=degACD #弧ADの円周角
print("#(1) ",Triangle(asa=(degABD,AH,degR)).is_similar(Triangle(asa=(degACD,AH,degR))))
AC,CD=10,6
AD =sqrt(AC**2-CD**2)
print("#(2)(ア)",AD)
AE=AD
CF=CD*AC/(AC+AD) # 角の二等分線の定理
FD=CD*AD/(AC+AD);AF=sqrt(AD**2+FD**2)
x =solve(Eq(x/AE,CF/AF),x)[0]
print("# (イ)",x)
#(1) True
#(2)(ア) 8
# (イ) sqrt(10)
sympyで(いつもの方法で)
ver0.41 弦が4つある内の一つ (直経ACをx軸方向)
・点Hを使っていない。
・<仮称>さしごの直角三角形の ダブル三平方 に同じ。円と円の交点計算で対応しました。
# ver4.1 弦が4つある内の一つ (直経ACをx軸方向)
from sympy import *
var('t',real=True,positive=True)
AC,CD=10,6
r = AC*Rational(1,2)
DA=sqrt(AC**2-CD**2)
O,A,C=map(Point,[(0,0),(-r,0),(r,0)])
D=Circle(A,DA).intersection( Circle(C,CD) )[1]
E=A+DA*(O-A).unit
B=Circle(O,r).intersection(Line(D,E))[1]
print("#",B.distance(E),float(B.distance(E)))
# sqrt(10) 3.1622776601683795
ver0.7 弦が4つある内の一つ (弦CDをx軸方向)
・仮t=∠OCD,∠ODC
# ver0.7 sympy風。弦が4つある内の一つ (弦CDをx軸方向)
from sympy import *
var('t',real=True,positive=True)
AC,CD=10,6
r=Rational(AC,2)
t=solve(Eq((CD*Rational(1,2))/r,cos(t)),t)[1]
O,C,D=map(Point,[(0,0),(-r*cos(t),-r*sin(t)),(r*cos(t),-r*sin(t))])
A=C+2*(O-C)
H=Circle(A.midpoint(D),A.distance(D)*Rational(1,2)) \
.intersection(Line(A,A+((C-A).unit+(D-A).unit)*Rational(1,2)))[0]
B=Circle(O,r).intersection(Line(H,D))[0]
E=Line(A,C) .intersection(Line(H,D))[0]
print("#",B.distance(E),float(B.distance(E)))
# sqrt(10) 3.1622776601683795
ver0.8 できませんでした。無理があるかも。ver0.6 弦が4つある内の一つ
・点Hを使わない方がいい
# できませんでした。無理があるかも。ver0.8 弦が4つある内の一つ (弦BDをx軸方向)
from sympy import *
var('x,y',real=True,positive=True)
AC,CD=10,6
r =Rational(AC,2)
BD=Rational(1,2)*(x+2*y)
O,B=map(Point,[(0,0),(-BD/2,-sqrt(r**2-(BD/2)**2))])
D =Point(-B.x,B.y)
E =B+Point(x,0)
A =E+2*(O-E)
C =A+AC*(O-A).unit
# print(Eq(C.distance(D),CD))
sol=solve(Eq(C.distance(D),CD),x)
print(sol)
できませんでした。無理があるかも。ver0.9 連立方程式
・ >直角三角形に注目していいですし、.....
・点Hを使わない方がいい
# できませんでした。無理があるかも。ver0.9 連立方程式
from sympy import *
var('t,AD,AH',real=True,positive=True)
AC,CD=10,6
AD=sqrt(AC**2-CD**2)
sol=solve([Eq(sin(t) ,AD/AC),
Eq(cos(t*Rational(1,2)),AH/AD)],
[t,AH])
print(sol)
t,AH,=sol[1][0],sol[1][1]
x=AH*(tan(t)+tan(t/2))-2*AH*tan(t/2)
print("#",x,float(x))
x=x.simplify()
print("#",x,float(x))
FreeCADのマクロで作図
・問題文は2次元ですが、3次元FreeCADのマクロで、XY平面に作図しました。
・計算部分は、Ver.0.6 の コピー貼り付けです。
・最後にAC水平を問題文の向きに回転しています。
import FreeCAD
import Part
import DraftTools
import Draft
import Mesh
############################################################################
# ver0.6 sympy風。弦が4つある内の一つ (直経ACをx軸方向)
# ・点Hを使っていない。
from sympy import *
var('t',real=True,positive=True)
AC,CD=10,6
r = AC*Rational(1,2)
DA=sqrt(AC**2-CD**2)
O,A,C=map(Point,[(0,0),(-r,0),(r,0)])
D=Circle(A,DA).intersection( Circle(C,CD) )[1]
E=A+DA*(O-A).unit
B=Circle(O,r).intersection(Line(D,E))[1]
print("#",B.distance(E),float(B.distance(E)))
# sqrt(10) 3.1622776601683795
###########################################################################
H=Line(B,D).projection(A)
def myMatrixToPoint(myMatrix):
return Point2D(myMatrix[0],myMatrix[1])
def myPoinrToMatrix(myPoint):
return Matrix([[myPoint.x],[myPoint.y],[1]])
t=-Line(O,O+Point(1,0)).angle_between(Line(B,D) )
myTurn=Matrix([[cos(t),-sin(t),0],[sin(t),cos(t),0],[0,0,1]])
A=myMatrixToPoint( myTurn*myPoinrToMatrix(A) )
B=myMatrixToPoint( myTurn*myPoinrToMatrix(B) )
C=myMatrixToPoint( myTurn*myPoinrToMatrix(C) )
D=myMatrixToPoint( myTurn*myPoinrToMatrix(D) )
E=myMatrixToPoint( myTurn*myPoinrToMatrix(E) )
H=myMatrixToPoint( myTurn*myPoinrToMatrix(H) )
############################################################################
# 3D作図 z=0 XY平面に作図しました。
# 2024-10-08 fontsize 追加しました。従来と互換性がありません。
# 2024-10-20 HR
############################################################################
def myDimension(fontsize,myExtOvershoot,start_point, end_point,HVP):
x1, y1 = start_point.args
x2, y2 = end_point.args
myFlipText = True
if HVP=="PL":
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y2))
myFlipText = False
myExtOvershoot1=abs(myExtOvershoot)
elif HVP=="PR":
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y2))
myFlipText = False
myExtOvershoot1=-abs(myExtOvershoot)
elif HVP=="VL":
if x1<x2 and y1<y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x1),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
myFlipText = False
elif x1<x2 and y1>y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x1),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
elif x1>x2 and y1<y2:
myP1 =Point(float(x2),float(y1))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
myFlipText = False
else:
myP1 =Point(float(x2),float(y1))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
elif HVP=="VR":
if x1<x2 and y1<y2:
myP1 =Point(float(x2),float(y1))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
myFlipText = False
elif x1<x2 and y1>y2:
myP1 =Point(float(x2),float(y1))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
elif x1>x2 and y1<y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x1),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
else:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x1),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
elif HVP=="HL":
if x1 < x2 and y1<y2:
myP1 =Point(float(x1),float(y2))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
myFlipText = False
elif x1 < x2 and y1>y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y1))
myExtOvershoot1= abs(myExtOvershoot)
myFlipText = False
elif x1 > x2 and y1<y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y1))
myExtOvershoot1= abs(myExtOvershoot)
else:
myP1 =Point(float(x1),float(y2))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1= abs(myExtOvershoot)
elif HVP=="HR":
#if x1<x2 and y1<y2: # 2024-10-20 HR
if x1<x2 and y1<=y2:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y1))
myExtOvershoot1=-abs(myExtOvershoot)
myFlipText = False
elif x1<x2 and y1>y2:
myP1 =Point(float(x1),float(y2))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
myFlipText = False
elif x1>x2 and y1<y2:
myP1 =Point(float(x1),float(y2))
myP2 =Point(float(x2),float(y2))
myExtOvershoot1=-abs(myExtOvershoot)
else:
myP1 =Point(float(x1),float(y1))
myP2 =Point(float(x2),float(y1))
myExtOvershoot1=-abs(myExtOvershoot)
else:
print("")
myM =myP1.midpoint(myP2)
myT =myM+myExtOvershoot1*((myP1-myM).unit).rotate( -pi/2 )
dimension = Draft.makeDimension(
FreeCAD.Vector(myP1.x, myP1.y, 0), # 点1の座標
FreeCAD.Vector(myP2.x, myP2.y, 0), # 点2の座標
FreeCAD.Vector(float(myT.x),float(myT.y),0) # 矢印の位置を中央に設定
)
# Ext Overshootを設定
dimension.ViewObject.ExtOvershoot = -float(myExtOvershoot)
dimension.ViewObject.FlipText = myFlipText
# 矢印のスタイルを設定
dimension.ViewObject.ArrowType = "Arrow" # 矢印のタイプを "Arrow" に設定
dimension.ViewObject.ArrowSize = fontsize/5
dimension.ViewObject.TextSpacing = 0
dimension.ViewObject.LineColor = (0.0, 1.0, 0.0) # 緑色
dimension.ViewObject.FontSize = fontsize # フォントサイズを指定
def myXYZ2Txt_2D(A):
return ""
def myXYZ2Txt_XY_2D(A):
return '(' + str(A.x) + ',' + str(A.y) + ')'
def myTxtXYZ_2D(fontsize,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 = str(fontsize,)+' mm'
return
def myTxtXYZ_S_2D(fontsize,*xy_tx):
for i in range(1,int(len(xy_tx)/2)+1):
myTxtXYZ_2D(fontsize,xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt_2D(xy_tx[2*i-2]) )
return
def myTxtXYZ_XY_S_2D(fontsize,*xy_tx):
for i in range(1,int(len(xy_tx)/2)+1):
myTxtXYZ_2D(fontsize,xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt_XY_2D(xy_tx[2*i-2]) )
return
def myTxtXYZ_MoveY_2D(fontsize,MoveY,A,myWedgei):
P5x=float(A.x)
P5y=float(A.y)+MoveY
P5z=0.0
p5 = FreeCAD.Vector(P5x, P5y, P5z)
myText = Draft.makeText(myWedgei, p5)
myText.Label = myWedgei
FreeCADGui.ActiveDocument.ActiveObject.FontSize = str(fontsize,)+' mm'
return
def myTxtXYZ_XY_S_MoveY_2D(fontsize,MoveY,*xy_tx):
for i in range(1,int(len(xy_tx)/2)+1):
myTxtXYZ_MoveY_2D(fontsize,MoveY,xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt_XY_2D(xy_tx[2*i-2]) )
return
############################################################################
# 3D作図 z=0 XY平面に作図しました。
############################################################################
# 円の作図 FrecCADのdocより
# https://wiki.freecad.org/Macro_Circle
def Freecad3D_circle(x=0.0,y=0.0,z=0.0,radius=0.0,diameter=0.0,circumference=0.0,area=0.0,startangle=0.0,endangle=0.0,arc=0.0,anglecenter=0.0,cord=0.0,arrow=0.0,center=0,placemObject=""):
from math import sqrt, pi
if placemObject == "":
pl = FreeCAD.Placement()
pl.Rotation = FreeCADGui.ActiveDocument.ActiveView.getCameraOrientation()
pl.Base = FreeCAD.Vector(x,y,z)
else:
pl = FreeCAD.Placement()
pl = placemObject # placement imposted
if diameter != 0: # with diameter
radius = diameter / 2.0
elif circumference != 0: # with circumference
radius = (circumference / pi) / 2.0
elif area != 0: # with area
radius = sqrt((area / pi))
elif (cord != 0) and (arrow != 0): # with cord and arrow
radius = ((arrow**2) + (cord**2) / 4.0) / (arrow*2)
elif (arc != 0) and (anglecenter != 0): # with arc and anglecenter central in degrees
radius = ((360/anglecenter)*arc) / pi/2.0
if endangle != 0:
startangle = endangle - anglecenter
endangle = anglecenter + startangle
startangle = endangle - anglecenter
if radius != 0:
try:
Draft.makeCircle(radius,placement=pl,face=False,startangle=startangle,endangle=endangle,support=None)
if center != 0:
x=pl.Base.x
y=pl.Base.y
z=pl.Base.z
Draft.makePoint(x,y,z)
except Exception:
App.Console.PrintError("Unexpected keyword argument" + "\n")
App.ActiveDocument.recompute()
else:
App.Console.PrintMessage("Unexpected keyword argument" + "\n")
App.Console.PrintMessage("circle(x,y,z,radius,diameter,circumference,area,startangle,endangle,[arc,anglecenter],[cord,arrow],center,placemObject)" + "\n")
App.Console.PrintMessage("circle(radius=10.0,placemObject=App.Placement(App.Vector(11,20,30), App.Rotation(30,40,0), App.Vector(0,0,0)))" + "\n")
return
def myCircle_2D(myCi):
x=myCi.center.x
y=myCi.center.y
r=myCi.radius
Freecad3D_circle(
x=float(x),y=float(y),z=0.0,
radius=float(abs(r)),
center=1,
placemObject=App.Placement(App.Vector(float(x),float(y),0),
App.Rotation(0,0,0),App.Vector(0,0,0)))
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
##################################################################################
myCircle_2D (Circle(O,r))
myLine_C_2D (A,B,E,H,D)
myLine_S_2D (A,C,D)
myLine_S_2D (A,H)
#
myFontsize =0.5
myOvershoot=myFontsize*7
#myTxtXYZ_XY_S_2D(myFontsize,O,"O",A,"A",B,"B",C,"C",D,"D",E,"E")
myTxtXYZ_XY_S_2D(myFontsize,O,"O",A,"A",B,"B",C,"C",D,"D")
# MoveY
myTxtXYZ_XY_S_MoveY_2D(myFontsize,myFontsize ,E,"E")
myTxtXYZ_XY_S_MoveY_2D(myFontsize,myFontsize*2,H,"H")
myDimension(myFontsize,myOvershoot,C,A,"PL")
myDimension(myFontsize,myOvershoot,C,D,"PR")
myDimension(myFontsize,myOvershoot,A,D,"PL")
myDimension(myFontsize,myOvershoot,B,E,"HR")
####################################################################################
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")
・(青色の)角度寸法は、ニセモノです。Part>計測>角度計算 です。
・角度寸法の表示は、まだ勉強中です。
isometric方向?です。(省略)
拡大図 回転前
参照
三四五(さしご)の定理
><仮称>ダブル三平方の さしごの直角三角形
相似 と 合同
私の感想1
内容の重複があります。
本問の設問(2)(イ)について。BEの長さ?
■図を見ただけで、相似の組み合わせが複数ある。
△ABHと△ACD(設問(1)より。)
△ABEと△ECD(蝶々)
△BCEと△EAD(蝶々。二等辺三角形)
△AEHと△HAD(合同。直角三角形)
さらに、延長して交点Fを追加すると組み合わせの数がふえる。
相似の組み合わせの数だけ、解法がある?
どれを、選択するかだと思いました。
(一目で解答が見える方もおられます。)
■(解法の技は別にして、)出題者の誘導 にのって、
△ABHと△ACDの「相似比」(設問(1)より角の三等分へ) 8√10/3:8。線分HD非表示。
△ABHと△ACDの辺の長さ
を求めるのがベストのように思います。
■私は、(高校入試虎の穴 様の)黄色と青色の三角形は気がつきませんでした。
設問(1)(2)(3)じゃないところがステキです。出題者の誘導かも。
この設問で時間を使わない方がイイよ。。
・(直角?)三角形の角の二等分線の長さは、三平方の定理を使って計算ができる。
(高校生には不要の定理?)
・蝶々?の相似でなくて、隣接した三角形の相似
過去問の類題を教えて下さい。よろしくお願いします。
私の感想2(追加洛南2014の問題後)
■ニッキーランド様に洛南の問題を教えてもらいました。
<仮称>ダブル三平方の さしごの直角三角形
半角・倍角の公式を使わなくてもすみます。
試験用紙を、ACを水平に回転して見る。
<仮称>ダブル三平方の さしごの直角三角形 。洛南 数学2014 平成26年
<仮称>さしごの直角三角形の ダブル三平方 。岐阜県 数学 2013 平成25年
<仮称>両者。オモテウラの関係問題。ウラオモテの関係問題。ドッチ?
■岐阜県の問題をさしごを使う解法は、出題者のユウドウにのっていないので
あまり望ましくない。半角・倍角の公式を使うのもです。所謂、
設問1を直接?使わずに最終問題の解法パターンは、自転車君の問題(共通テ2022)に似ています。
よって、
高校入試虎の穴 様の解法の、ユウドウ(1)相似の問題、(2)図の右端から、片押し?がわかりやすいと思いました。
参考(ダブル三平方???)
覚えていると得するよ の ページの最後(64)
http://ynaka.html.xdomain.jp/toku2.html