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 3 years have passed since last update.

「【今年の1問】 2021年開成中-三角すいの体積」を参考にWolframAlphaとonline sympyとFreeCAD でやってみた。

Last updated at Posted at 2021-06-03

(オリジナルポスト)

手計算1(ryuichi59様より)

761/261/3=42

手計算2(tttaaakki様より)

3.5*72/6=42

手計算3(高さの平均より)

以下でいいですか?こじつけてみました。
点Pと点Rの中点MPR(3,3,4.5)
点Qと点Sの中点MQS(3,3,1.0)
高さの平均は、中点MPRと中点MQSの鉛直距離4.5-1.0=3.5cm
底面積=(0,0,0)と(6,0,0)と(6,6,0)と(0,6,0)の正方形の面積=66cm2
3次元なので、÷3
∴体積=(6
6)*3.5/3=42cm3

WolframAlphaで

Tetrahedronはできました。

volumeは、「次のように解釈:6 0 2 6 6 4」できませんでした。
未確認。mathematicaは、できると思います。

online sympyで

online sympyで、①は実行できました。貼り付けて下さい。
https://live.sympy.org/

①最初に値を代入してみた。底面積×高さ×1/3

from sympy import *
def myHeron(p1,p2,p3):
    a=p1.distance(p2)
    b=p2.distance(p3)
    c=p3.distance(p1)
    s = (a + b + c) / 2
    return sqrt(s * (s - a) * (s - b) * (s - c))
def myVolumeTetrahedron(p1,p2,p3,p4):
    ans=Plane(p1,p2,p3).projection(p4).distance(p4)*myHeron(p1,p2,p3)/3
    return ans
p1,p2,p3,p4= map(Point3D, [(0,0,5),(6,0,2),(6,6,4),(0,6,0)])
ans=myVolumeTetrahedron(p1,p2,p3,p4)
print(float(ans),"cm3")
# 42.0 cm3

②最後に値を代入してみた。底面積×高さ×1/3

online sympyで「Error: Operation timed out.」が、でました。
pycharmで実行できました。

from sympy import *
def myHeron(p1,p2,p3):
    a=p1.distance(p2)
    b=p2.distance(p3)
    c=p3.distance(p1)
    s = (a + b + c) / 2
    return sqrt(s * (s - a) * (s - b) * (s - c))
def myVolumeTetrahedron(p1,p2,p3,p4):
    ans=Plane(p1,p2,p3).projection(p4).distance(p4)*myHeron(p1,p2,p3)/3
    return ans
var('px py pz')
var('qx qy qz')
var('rx ry rz')
var('sx sy sz')
p1,p2,p3,p4= map(Point3D, [(px,py,pz),(qx,qy,qz),(rx,ry,rz),(sx,sy,sz)])
ans=myVolumeTetrahedron(p1,p2,p3,p4)
ans=ans.subs([(px, 0), (py, 0), (pz, 5),
              (qx, 6), (qy, 0), (qz, 2),
              (rx, 6), (ry, 6), (rz, 4),
              (sx, 0), (sy, 6), (sz, 0)
             ])
print(float(ans),"cm3")
# 42.0 cm3

③行列の三次元の座標変換です。底面積×高さ×1/3

以下で質問中。 Page not found

④最後に値を代入してみた。行列式。(2021-06-07)

これが短くていいですね。
?my_Sの作り方。my_PQRSからmy_Sを作る方法を教えて下さい。
Matrixの4行目を取り出して、3行繰り返す方法です。よろしくお願いします。

from sympy import *
var('px py pz')
var('qx qy qz')
var('rx ry rz')
var('sx sy sz')
my_PQRS=Matrix([[px,py,pz],
                [qx,qy,qz],
                [rx,ry,rz],
                [sx,sy,sz]
               ])
my_S   =Matrix([[sx,sy,sz],
                [sx,sy,sz],
                [sx,sy,sz]
              ])
ans=det(my_PQRS[:3,:3].T-my_S.T)\
    .subs([(px, 0), (py, 0), (pz, 5),
           (qx, 6), (qy, 0), (qz, 2),
           (rx, 6), (ry, 6), (rz, 4),
           (sx, 0), (sy, 6), (sz, 0)
         ])
print("#",'{:.3f}'.format(float(ans)/6),'cm3')
# 42.000 cm3

(参考)

(参考)

⑤最初に値を代入してみた。行列式。(2021-06-08)

これがもっと、短くていいですね。
?my_Sの作り方。my_PQRSからmy_Sを作る方法を教えて下さい。
Matrixの4行目を取り出して、3行繰り返す方法です。

from sympy import *
def myVolumeTetrahedron(myTetrahedron):
    my_PQRS=Matrix(myTetrahedron)
    my_S   =Matrix([myTetrahedron[3],myTetrahedron[3],myTetrahedron[3]])
    return float(det(my_PQRS[:3, :3].T - my_S.T)/6)
myTetrahedron=[[0,0,5],[6,0,2],[6,6,4],[0,6,0]]
print("#",'{:.3f}'.format(myVolumeTetrahedron(myTetrahedron)),'cm3')
# 42.000 cm3

FreeCAD 0.19のマウス操作でやってみたい。

省略。

FreeCAD 0.19のマクロでやってみた。画像の挿入はこれからです。

ただいま、以下で質問中。(2021-06-04)

あとがき

上記についてアドバイスよろしくお願いします。
もっと簡潔に書けると思います。

体積の求め方は、上面、下面それぞれを体積を変えないように、水平にした時の平均高さに、底面積をかける。3次元なので、÷3
(参考)

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?