ChatGPT3.5先生は2024年GW中、大学入試数学の猛勉強されましたか？空間ベクトル「気象大学校2022年多肢選択式第13問」をChatGPTとsympyとFreeCADでやってみたい。

~~既投稿を潰してしまって、復旧中です。申し訳ありません。~~
　気のせいなら、ごめんなさい。
**・sympyの計算結果もでる。**
　今まで、sympyの計算結果がでなかったはず？
　「sympyで」が無しでも、結果がでる。

・作図は、私のFreeCADの操作が未熟で、申し訳ありません。
・気象大学校の年度は、ビミョーに１つずれるそうです。

**(2024/05/21追加)**
　猛勉強は、
「GPT-4o（オムニ：omni）」と関係ないと思います。
https://ja.wikipedia.org/wiki/ChatGPT#GPTモデル
https://www.deepl.com/ja/translator#en/ja/omni

# オリジナル
＞ T氏の数学日記 様 問題解答解説

リンク先を直しました。

https://mathmathmass.exblog.jp/33799604/

＞ 大学入試数学問題集成 様 ＞【13】テキスト

https://mathexamtest.web.fc2.com/2023/202320120/2023201200100mj.html#top-0113

公式ホームページ
(省略)

# sympyで(オリジナル 様の方法で)
・??? 勉強中

# ChatGPT-3.5先生へ(その1) 選択肢あり。


・ページのソースを表示です。MathMLです。
　途中の表示を省略しようと思いましたが、大学入試数学問題集成 様の必要部分です。
```
<div class="qbody">
<p class="slevel"><a name="q-0113" 
id="q-0113"></a><span 
class="qnum">【13】</span>　座標空間内の<math>
<mspace width=".2em"></mspace><mn>4</mn>
<mspace width=".2em"></mspace>
</math>点<math>
<mspace width=".2em"></mspace><mi mathvariant="normal">A</mi>
<mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>0</mn><mo>,</mo>
<mo>-</mo><mn>1</mn><mo>,</mo><mn>1</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">B</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>2</mn><mo>,</mo>
<mn>0</mn><mo>,</mo><mn>0</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">C</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>1</mn><mo>,</mo>
<mn>0</mn><mo>,</mo><mn>1</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">D</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mi>t</mi><mo>,</mo><mn>2</mn>
<mo>,</mo><mn>0</mn><mo rspace=".2em" stretchy="false">)</mo></mrow>
</math><math>
<mrow><mtext>（</mtext><mspace width=".2em"></mspace>
<mi>t</mi></mrow><mspace width=".2em"></mspace>
</math>は実数）が同一平面上にあるとき，<math>
<mi>t</mi><mspace width=".2em"></mspace>
</math>の値はいくらか．</p>
<p class="s2sublevel half"><math>
<mrow><mtext>1．</mtext><mo>-</mo><mn>2</mn><mtext>　　</mtext></mrow>
</math><math>
<mrow><mtext>2．</mtext><mn>0</mn><mtext>　　</mtext></mrow>
</math><math>
<mrow><mtext>3．</mtext><mn>2</mn><mtext>　　</mtext></mrow>
</math><math>
<mrow><mtext>4．</mtext><mn>4</mn><mtext>　　</mtext></mrow>
</math><math>
<mrow><mtext>5．</mtext><mn>6</mn></mrow></math>
</p>
</div>
</div>
```
・上記を、ChtGPTのnewchatにコピー貼り付けです。
・**なんだか、凄すぎる。**
　(結果省略)

# ChatGPT-3.5先生へ(その2) 選択肢なし。
```
<div class="qbody">
<p class="slevel"><a name="q-0113" 
id="q-0113"></a><span 
class="qnum">【13】</span>　座標空間内の<math>
<mspace width=".2em"></mspace><mn>4</mn>
<mspace width=".2em"></mspace>
</math>点<math>
<mspace width=".2em"></mspace><mi mathvariant="normal">A</mi>
<mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>0</mn><mo>,</mo>
<mo>-</mo><mn>1</mn><mo>,</mo><mn>1</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">B</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>2</mn><mo>,</mo>
<mn>0</mn><mo>,</mo><mn>0</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">C</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mn>1</mn><mo>,</mo>
<mn>0</mn><mo>,</mo><mn>1</mn>
<mo rspace=".2em" stretchy="false">)</mo><mtext>，</mtext></mrow>
</math><math>
<mi mathvariant="normal">D</mi><mspace width=".5em"></mspace>
</math><math>
<mrow><mo stretchy="false">(</mo><mi>t</mi><mo>,</mo><mn>2</mn>
<mo>,</mo><mn>0</mn><mo rspace=".2em" stretchy="false">)</mo></mrow>
</math><math>
<mrow><mtext>（</mtext><mspace width=".2em"></mspace>
<mi>t</mi></mrow><mspace width=".2em"></mspace>
</math>は実数）が同一平面上にあるとき，<math>
<mi>t</mi><mspace width=".2em"></mspace>
</math>の値はいくらか．</p>
```
・上記を、ChtGPTのnewchatにコピー貼り付けです。
・**なんだか、これも凄すぎる。**
　(結果省略)

# ChatGPT-3.5先生へ(その3)???　私は先生の凄さがわかりませんでした。 
・以下の１行を追加して、貼り付ける。
　行列式を使わず、ベクトルだけでお願いします。
・**なんだか、これも凄すぎる。**
　(結果省略)

# ChatGPT-3.5先生へ(その4)???　私は先生の凄さがわかりませんでした。 
・sympyで
・ChatGPT-3.5先生のコードをvscodeで実行しました。
　私は、ソースコードのprint文に手を加えています。
・**なんだか、これも凄すぎる。**
　(結果省略)

```python
import sympy as sp

# Define the coordinates of the points
A = sp.Matrix([0, -1, 1])
B = sp.Matrix([2, 0, 0])
C = sp.Matrix([1, 0, 1])
D = sp.Matrix([sp.symbols('t'), 2, 0])

# Vectors AB, AC, AD
AB = B - A
AC = C - A
AD = D - A

# Mixed product AB · (AC × AD)
mixed_product = AB.dot(AC.cross(AD))

# Solve for t
t_value = sp.solve(mixed_product, sp.symbols('t'))
print("#",t_value)
# [4]
```


# (従来の方法)sympyで、私のいつもの方法です。
・以下、私のコツコツのコードです。
・安易に行列式を使っています。 
＞sympy docより
https://docs.sympy.org/latest/tutorials/intro-tutorial/matrices.html#advanced-methods

・ ver.0.1 : T氏様の解答方法を参考にです。
```python
# ver0.1
from sympy import *
var('t,p,q',real=True)
A=Point(0,-1, 1)
B=Point(2, 0, 0)
C=Point(1, 0, 1)
D=Point(t, 2, 0)
DA1=p*(B-A)+q*(C-A)  
DA2=  (D-A)  
print  ("#",solve([Eq(DA1.x,DA2.x),Eq(DA1.y,DA2.y),Eq(DA1.z,DA2.z)],[p,q,t])[t])
# print("#",solve([Eq(DA1  ,DA2  )                                ],[p,q,t])[t])
# 4
```

・ ver.0.2 : 行列式の三角錐の体積公式??? です。
```python
# ver0.2
from sympy import *
var('t',real=True)
def SimentaiTaiseki(PTO,PTA,PTB,PTC):
    return 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
A=Point(0,-1, 1)
B=Point(2, 0, 0)
C=Point(1, 0, 1)
D=Point(t, 2, 0)
t_ans=solve(SimentaiTaiseki(A,B,C,D),t)[0]
print("#",t_ans)
# 4
```

・ ver.0.3 : ver.0.2と同じです.わざわざ作図のためです。
```python
# ver0.3
from sympy import *
var('t',real=True)
def SimentaiTaiseki(PTO,PTA,PTB,PTC):
    return 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
A=Point(0,-1, 1)
B=Point(2, 0, 0)
C=Point(1, 0, 1)
D=Point(t, 2, 0)
D=D.subs({t:solve(SimentaiTaiseki(A,B,C,D),t)[0]})
print("#",D)
# Point3D(4, 2, 0)
```

・ ver.0.4 : チョット凝りすぎのプログラム: 三角錐の体積公式???へ値の代入
？？？点A,B,Cの座標に値を、具体的な代入していない。
　変数のまま。最後に値を代入。

```python
from sympy import *
var('t'       ,real=True)
var('ax,ay,az',real=True)
var('bx,by,bz',real=True)
var('cx,cy,cz',real=True)
var('dx,dy,dz',real=True)
def SimentaiTaiseki(PTO,PTA,PTB,PTC):
    return 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
A=Point(ax,ay,az)
B=Point(bx,by,bz)
C=Point(cx,cy,cz)
D=Point(dx,dy,dz)
V=SimentaiTaiseki(A,B,C,D)
print("#",V)
# 
rep={ax:0,ay:-1,az:1,
     bx:2,by: 0,bz:0,
     cx:1,cy: 0,cz:1,
     dx:t,dy: 2,dz:0}
print("#",D.subs(rep).subs({t:solve(V.subs(rep),t)[0]}))
# -ax*by*cz/6 + ax*by*dz/6 + ax*bz*cy/6 - ax*bz*dy/6 - ax*cy*dz/6 + ax*cz*dy/6 + ay*bx*cz/6 - ay*bx*dz/6 - ay*bz*cx/6 + ay*bz*dx/6 + ay*cx*dz/6 - ay*cz*dx/6 - az*bx*cy/6 + az*bx*dy/6 + az*by*cx/6 - az*by*dx/6 - az*cx*dy/6 + az*cy*dx/6 + bx*cy*dz/6 - bx*cz*dy/6 - by*cx*dz/6 + by*cz*dx/6 + bz*cx*dy/6 - bz*cy*dx/6
# Point3D(4, 2, 0)
```

・ ver.0.5 : ver0.4と同じ。Point文をmap関数にしました。
```python
from sympy import *
var('t'       ,real=True)
var('ax,ay,az',real=True)
var('bx,by,bz',real=True)
var('cx,cy,cz',real=True)
var('dx,dy,dz',real=True)
def SimentaiTaiseki(PTO,PTA,PTB,PTC):
    return 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
A,B,C,D=map(Point,[(ax,ay,az),(bx,by,bz),(cx,cy,cz),(dx,dy,dz)])
V=SimentaiTaiseki(A,B,C,D)
print("#",V)
# 
rep={ax:0,ay:-1,az:1,
     bx:2,by: 0,bz:0,
     cx:1,cy: 0,cz:1,
     dx:t,dy: 2,dz:0}
print("#",D.subs(rep).subs({t:solve(V.subs(rep),t)[0]}))
# -ax*by*cz/6 + ax*by*dz/6 + ax*bz*cy/6 - ax*bz*dy/6 - ax*cy*dz/6 + ax*cz*dy/6 + ay*bx*cz/6 - ay*bx*dz/6 - ay*bz*cx/6 + ay*bz*dx/6 + ay*cx*dz/6 - ay*cz*dx/6 - az*bx*cy/6 + az*bx*dy/6 + az*by*cx/6 - az*by*dx/6 - az*cx*dy/6 + az*cy*dx/6 + bx*cy*dz/6 - bx*cz*dy/6 - by*cx*dz/6 + by*cz*dx/6 + bz*cx*dy/6 - bz*cy*dx/6
# Point3D(4, 2, 0)
```

# FreeCADのマクロで作図
・計算は、ver0.3にしました。
・３次元FreeCADのワイヤーフレームです。
・マクロプログラムの計算部分は、コピーしています。
```python
import FreeCAD
import Part
import Draft
import Mesh
#########################################################################################################
# 計算
##############################################################
# ver0.3
from sympy import *
var('t',real=True)
def SimentaiTaiseki(PTO,PTA,PTB,PTC):
    return 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
A=Point(0,-1, 1)
B=Point(2, 0, 0)
C=Point(1, 0, 1)
D=Point(t, 2, 0)
D=D.subs({t:solve(SimentaiTaiseki(A,B,C,D),t)[0]})
print("#",D)
# Point3D(4, 2, 0)

##########################################################################################################
### 作図用
##########################################################################################################
### 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 = '1.0 mm'
    # FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.5 mm'
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.3 mm'
    # FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.1 mm'
    # FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.05 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  (A,B,C)
myLine_H  (D,A,B,C)
myTxtXYZ_S(A,"A",B,"B",C,"C",D,"D")
#
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")
```
・作図はしましたが、FreeCADの勉強不足で、正しいか誤っているかよくわかりません。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/48bd9c36-8449-9c3d-841a-b29c0557180e.png)
拡大図
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/60f02e9b-c652-5523-b5d9-39a4527fd486.png)


# いつもと違うおすすめです。
「(自作)三角錐の座標による体積の公式」へのリンクを追加しました。

https://qiita.com/mrrclb48z/items/9b2148d61d7e472fcdad

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)