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

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

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

# オリジナル
河合塾 様
問題解答解説
 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【２】テキスト
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">【２】</span>　座標空間内の<math>
　(途中省略)
</math>を求めよ．
</p>
```
・上記を、ChtGPTのnewchatにコピー貼り付けです。
　(始めから、sympyで。ありかも。)
```
...各問題の解答を求めるには、具体的な計算と方程式の解を行う必要があります。
```
```
sympyで
```
(私)Matrixがキターーー　(chrombookの文字変換です。)
```
Pointでお願いします。
```
```
理解しました。以下に、問題の解決にPointを使用するsympyコードを示します。
```
(省略)
・SymPy Liveで

https://live.sympy.org/

(SymPy Live　エラー多数)
(vscode　ValueError: Line3D.__new__ requires two unique Points.)
```
FreeCADでお願いします。
```
(省略)

# sympyで、私のいつもの方法です。
・**大学入試数学問題集成 様へ ありがとうございます。**
　元ネタは、MathJaxです。
　ChatGPTのコードを改良して作成です。数値のキーインしなくて、**いいですね～。**
・??? ChatGPT-3.5先生は、planeのarea ???
```python
# 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のマクロで作図
・３次元FreeCADのワイヤーフレームです。
・マクロプログラムの計算部分は、コピーしています。
```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/e7781da3-2ebb-b751-a1f3-bd00e6979671.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/607aa090-3c22-5712-e608-a25ff9674f65.png)


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