1
0

空間ベクトル「2024 広島大学 前期 理系【2】,文系【3】」をChatGPTとsympyとFreeCADでやってみたい。

Last updated at Posted at 2024-03-08

パイソニスタの方へ
・コマンド1個で、(ChatGPTとsympyとFreeCADを)投稿する方法がありますか?

・(省略)だらけで申し訳ありません。ChatGPT用のステキなテンプレートありませんか?
・黒背景に、2色があってもいいですね。

オリジナル

河合塾 様
問題解答解説
https://nyushi.sankei.com/honshi/24/hr1-21p.pdf#page=2
https://kaisoku.kawai-juku.ac.jp/nyushi/honshi/24/hr1-21a.pdf#page=2
>2024年解答速報 数学入試問題 様
https://kamelink.com/exam/index.php?2024%C7%AF%B2%F2%C5%FA%C2%AE%CA%F3#hf2992ad

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

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

・勉強中

ChatGPT-3.5先生へ

大学入試数学問題集成 様> 2024 広島大学 前期MathJax【2】テキスト
https://mathexamtest.web.fc2.com/2024/202410721/2024107210100mj.html#top-0102

・ページのソースを表示です。MathMLです。

<p class="slevel"><a name="q-0102" 
id="q-0102"></a><span 
class="qnum">【2】</span> 座標空間内の<math>
 (途中省略)
</math>を求めよ.
</p>

・上記を、ChtGPTのnewchatにコピー貼り付けです。
 (始めから、sympyで。ありかも。)

...各問題の解答を求めるには、具体的な計算と方程式の解を行う必要があります。
sympyで

(私)Matrixがキターーー (chrombookの文字変換です。)

Pointでお願いします。
理解しました。以下に、問題の解決にPointを使用するsympyコードを示します。

(省略)
・SymPy Liveで

(SymPy Live エラー多数)
(vscode ValueError: Line3D.new requires two unique Points.)

FreeCADでお願いします。

(省略)

sympyで、私のいつもの方法です。

大学入試数学問題集成 様へ ありがとうございます。
 元ネタは、MathJaxです。
 ChatGPTのコードを改良して作成です。数値のキーインしなくて、いいですね~。
・??? ChatGPT-3.5先生は、planeのarea ???

# ver0.1
from sympy import *
from sympy import Point, Plane, Line
O = Point(0, 0, 0)
A = Point(1, 1, 0)
B = Point(0, 1, 1)
C = Point(1, 2, -1)
dot_product_AB = (A - O).dot(B - O)
dot_product_AC = (A - O).dot(C - O)
dot_product_BC = (B - O).dot(C - O)
print("#(1) 内積 OA・OB:", dot_product_AB)
print("#(1) 内積 OA・OC:", dot_product_AC)
print("#(1) 内積 OB・OC:", dot_product_BC)

alpha = Plane(O, A, B )
M = alpha.projection(C)
print("#(2) 点Mの座標:", M)

D = C + 2 * (M-C)
print("#(3) 点Dの座標:", D)

def myMensekiVector3D(P,Q,R):
    return Rational(1,2)*sqrt(P.distance(R)**2*Q.distance(R)** 2 \
           -(P-R).dot(Q-R)**2)
print("#(4) 三角形CADの面積:", myMensekiVector3D(C, A, D))

#(1) 内積 OA・OB: 1
#(1) 内積 OA・OC: 3
#(1) 内積 OB・OC: 1
#(2) 点Mの座標: Point3D(5/3, 4/3, -1/3)
#(3) 点Dの座標: Point3D(7/3, 2/3, 1/3)
#(4) 三角形CADの面積: 2*sqrt(2)/3

FreeCADのマクロで作図

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

import FreeCAD
import Part
import Draft
import Mesh
#########################################################################################################
# 計算
##############################################################
# ver0.1
from sympy import *
from sympy import Point, Plane, Line
O = Point(0, 0, 0)
A = Point(1, 1, 0)
B = Point(0, 1, 1)
C = Point(1, 2, -1)
dot_product_AB = (A - O).dot(B - O)
dot_product_AC = (A - O).dot(C - O)
dot_product_BC = (B - O).dot(C - O)
print("#(1) 内積 OA・OB:", dot_product_AB)
print("#(1) 内積 OA・OC:", dot_product_AC)
print("#(1) 内積 OB・OC:", dot_product_BC)

alpha = Plane(O, A, B )
M = alpha.projection(C)
print("#(2) 点Mの座標:", M)

D = C + 2 * (M-C)
print("#(3) 点Dの座標:", D)

def myMensekiVector3D(P,Q,R):
    return Rational(1,2)*sqrt(P.distance(R)**2*Q.distance(R)** 2 \
           -(P-R).dot(Q-R)**2)
print("#(4) 三角形CADの面積:", myMensekiVector3D(C, A, D))
##########################################################################################################
### 作図用
##########################################################################################################
### 3D作図
def myXYZ2Txt(A):
     return '(' + str(A.x) + ',' + str(A.y) + ',' + str(A.z) + ')'
    #return ''
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.2 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_S  (A,O,B)
myLine_S  (O,M)
myLine_S  (A,C)
myLine_S  (A,M)
myLine_S  (A,D)
myLine_C  (A,C,D)
myTxtXYZ_S(O,"O",A,"A",B,"B",C,"C",D,"D",M,"M")
#
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")

・作図はしましたが、正しいか、誤っているかよくわかりません。
1.png

2.png

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

(テンプレート)

1
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
1
0