(オリジナルポスト)
手計算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
∴体積=(66)*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
(参考)