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.

空間図形 三角錐の体積「2024 京都大学 文系[1] 」をChatGPTとsympyとFreeCADでやってみたい。

Last updated at Posted at 2024-02-26

空間図形の問題で、参考図がない時、 (2024-02-29現在)
 ChatGPT-3.5先生に、解答解説してもらえるはず???
・ベクトルの成分表示です。

パイソニスタの方へ
・ChatGPT-3.5先生の、どこが間違っているのかわかりませんでした。
・4.0先生と結果は、違いますか?
・他にAIはありますか?

オリジナル

問題
https://nyushi.sankei.com/honshi/24/k01-22p.pdf
解答
https://kaisoku.kawai-juku.ac.jp/nyushi/honshi/24/k01-22a.pdf
>2024年解答速報 数学入試問題 様
https://kamelink.com/exam/index.php?2024%C7%AF%B2%F2%C5%FA%C2%AE%CA%F3#p48c0a1e

上と同じです。大学入試数学問題集成 様>テキスト
未登録(2024/02/23)

公式ホームページ
未登録(2024/02/23)

youtube
東大合格請負人 時田啓光チャンネル 様

ChatGPT-3.5先生へ。

どこが間違っているのかわかりませんでした。

・入力 ChatGPT-3.5

四面体OABCが次を満たすとする.
 OA=OB=OC=1, ∠COA=∠COB=∠ACB,∠AOB=90°
このとき、四面体OABCの体積を求めよ.

・返信
Tetrahedron volume calculation
省略。ステキです。

??? ...体積は1/16です。 

私が最終行に、1行追加しました。

四面体OABCが次を満たすとする.
 OA=OB=OC=1, ∠COA=∠COB=∠ACB,∠AOB=90°
このとき、四面体OABCの体積を求めよ.
sympyでお願いします。

・返信
途中省略。ステキです。

###############
# 間違っています。
###############
from sympy import symbols, solve, acos, sqrt

# 変数を定義
x = symbols('x')

# 角度ACBをxとして定義
angle_ACB = x

# 角度COAをxとして定義
angle_COA = x

# 角度COBをxとして定義
angle_COB = x

# 角度AOBを90度とする
angle_AOB = 90

# 角度の関係を考慮してxを求める
angle_sum = angle_ACB + angle_COA + angle_COB
x_value = solve(angle_sum - 180)

# xの値を代入して各辺の長さを求める
angle_ACB_value = x_value[0]
angle_COA_value = x_value[0]
angle_COB_value = x_value[0]

# 辺の長さを求める
a = 1  # OA = OB = OC = 1
b = a / sqrt(2)  # AB
c = b  # BC
d = sqrt(a**2 + b**2)  # OC

# 四面体の体積を求める
volume = Rational(1, 3) * a * b * c

print("四面体の体積:", volume)

・SymPy Liveで

...四面体の体積: 1/6

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

・勉強中

sympyで(私のいつもの方法で)

home.hirosaki-u.ac.jp 様

・ver0.1

# ver0.1
from sympy import *
var('cx,cy',real=True)
var('cz'   ,real=True,nonnegative=True)
def myTaiseki(PTO,PTA,PTB,PTC):
    return abs(Matrix([[PTA.x-PTO.x, PTA.y-PTO.y, PTA.z-PTO.z],
                       [PTB.x-PTO.x, PTB.y-PTO.y, PTB.z-PTO.z],
                       [PTC.x-PTO.x, PTC.y-PTO.y, PTC.z-PTO.z]]
              ).det()/6)
O,A,B,C=map(Point,[(0,0,0),(1,0,0),(0,1,0),(cx,cy,cz)])                
sol=solve([Eq(O.distance(C) ,1),
           Eq((C-O).dot(A-O)/(C.distance(O)*A.distance(O)),
              (C-O).dot(B-O)/(C.distance(O)*B.distance(O)) ),
           Eq((C-O).dot(B-O)/(C.distance(O)*B.distance(O)),
              (A-C).dot(B-C)/(A.distance(C)*B.distance(C)) ),
          ],
          [cx,cy,cz] )
C=C.subs({cx:sol[0][0],cy:sol[0][1],cz:sol[0][2]})
print("#",myTaiseki(O,A,B,C)  )
# sqrt(-2 + 2*sqrt(2))/6

FreeCADのマクロで作図

・3次元FreeCADのワイヤーフレームです。
・マクロプログラムの計算部分は、コピーしています。

import FreeCAD
import Part
import Draft
import Mesh
#########################################################################################################
# 計算
# ver0.1
from sympy import *
var('cx,cy',real=True)
var('cz'   ,real=True,nonnegative=True)
def myTaiseki(PTO,PTA,PTB,PTC):
    return abs(Matrix([[PTA.x-PTO.x, PTA.y-PTO.y, PTA.z-PTO.z],
                       [PTB.x-PTO.x, PTB.y-PTO.y, PTB.z-PTO.z],
                       [PTC.x-PTO.x, PTC.y-PTO.y, PTC.z-PTO.z]]
              ).det()/6)
O,A,B,C=map(Point,[(0,0,0),(1,0,0),(0,1,0),(cx,cy,cz)])                
sol=solve([Eq(O.distance(C) ,1),
           Eq((C-O).dot(A-O)/(C.distance(O)*A.distance(O)),
              (C-O).dot(B-O)/(C.distance(O)*B.distance(O)) ),
           Eq((C-O).dot(B-O)/(C.distance(O)*B.distance(O)),
              (A-C).dot(B-C)/(A.distance(C)*B.distance(C)) ),
          ],
          [cx,cy,cz] )
C=C.subs({cx:sol[0][0],cy:sol[0][1],cz:sol[0][2]})
print("#",myTaiseki(O,A,B,C)  )
# sqrt(-2 + 2*sqrt(2))/6
##########################################################################################################
### 作図用
##########################################################################################################
### 3D作図
def myXYZ2Txt(A):
    return '(' + str(A.x) + ',' + str(A.y) + ',' + str(A.z) + ')'
def myTxtXYZ(A,myWedgei):
    P5x=float(A.x)
    P5y=float(A.y)
    P5z=float(A.z)
    p5 = FreeCAD.Vector(P5x, P5y, P5z)
    myText = Draft.makeText(myWedgei, p5)
    myText.Label = myWedgei
    #FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.3 mm'
    #FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.1 mm'
    #FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.2 mm'
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.15 mm'
    return
def myTxtXYZ_S(*xy_tx):
    for i in range(1,int(len(xy_tx)/2)+1):
        myTxtXYZ(xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt(xy_tx[2*i-2]) )
    return
def myLine(A,B):
    Ax,Ay,Az=float(A.x),float(A.y),float(A.z)
    Bx,By,Bz=float(B.x),float(B.y),float(B.z)
    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(*args):
    for i in range(1,len(args)):
        myLine(args[i-1],args[i])
    return
def myLine_C(*args):
    for i in range(1,len(args)):
        myLine(args[i-1],args[i])
    myLine(args[i],args[0])
    return
def myLine_H(*args):
    for i in range(1,len(args)):
        myLine(args[0],args[i])
    return
#
myLine_C  (O,A,B)
myLine_H  (C,O,A,B)
myTxtXYZ_S(O,"O",A,"A",B,"B",C,"C")
#
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方向?です。
1.png

・拡大図
・Origin非表示はCAD操作です。
2.png

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

0
0
0

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?