如何计算每个面偏移的四面体体积

如何解决如何计算每个面偏移的四面体体积

四面体平面的体积如何偏移?

计算三棱锥每个面的平行面,计算每个面在四个点的交点。根据交点计算的坐标计算体积。

①我该怎么办?

from sympy import *
def myIntersection_of_3_planes(a,b,c):
    ab = a.intersection(b)
    abc = ab[0].intersection(c)
    return abc[0]

def myUnitVector(C):
    D=Matrix([[0],[0],[0]])
    myL=sqrt(C[0]**2+C[1]**2+C[2]**2)
    D[0]=C[0]/myL
    D[1]=C[1]/myL
    D[2]=C[2]/myL
    return D

def my3Point_Offset(myT0,myT1,myT2,my03):
    mmy03=myCrossproduct(Matrix(myT1)-Matrix(myT0),Matrix(myT2)-Matrix(myT0))
    mmy03=myUnitVector(mmy03)
    mmy03[0]=float(mmy03[0])*my03
    mmy03[1]=float(mmy03[1])*my03
    mmy03[2]=float(mmy03[2])*my03
    myT0S=Matrix([[0],[0]])
    myT1S=Matrix([[0],[0]])
    myT2S=Matrix([[0],[0]])
    myT0S[0]=myT0[0]-mmy03[0]
    myT0S[1]=myT0[1]-mmy03[1]
    myT0S[2]=myT0[2]-mmy03[2]
    myT1S[0]=myT1[0]-mmy03[0]
    myT1S[1]=myT1[1]-mmy03[1]
    myT1S[2]=myT1[2]-mmy03[2]
    myT2S[0]=myT2[0]-mmy03[0]
    myT2S[1]=myT2[1]-mmy03[1]
    myT2S[2]=myT2[2]-mmy03[2]
    return myT0S,myT1S,myT2S

def my4Point_Intersection(myT0,myT3,my01,my02,my03):
        aa=my3Point_Offset(myT0,my03[0])
        bb=my3Point_Offset(myT0,my01[0])
        cc=my3Point_Offset(myT0,my02[0])
        p11,p12,p13 = map(Point3D,[aa[0],aa[1],aa[2]])
        p21,p22,p23 = map(Point3D,[bb[0],bb[1],bb[2]])
        p31,p32,p33 = map(Point3D,[cc[0],cc[1],cc[2]])
        a = Plane(p11,p13)
        b = Plane(p21,p23)
        c = Plane(p31,p33)
        ans=myIntersection_of_3_planes(a,c)
        return ans

def myCrossproduct(A,B):
    return expand(Matrix([
            [A[1,0]*B[2,0]-A[2,0]*B[1,0]],[A[2,0]*B[0,0]-A[0,[A[0,0]-A[1,0]]
                                ]))

def myIntersection_of_3_planes(a,c):
    ab = a.intersection(b)
    abc = ab[0].intersection(c)
    return abc[0]

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],[10,[0,10,10]]
myOffset     =[[0],[0]     ]
myT0=my4Point_Intersection(myTetrahedron[0],myTetrahedron[1],myTetrahedron[2],myOffset[1],myOffset[2],myOffset[3])
myT1=my4Point_Intersection(myTetrahedron[1],myTetrahedron[0],myOffset[3],myOffset[0])
myT2=my4Point_Intersection(myTetrahedron[2],myOffset[0],myOffset[1])
myT3=my4Point_Intersection(myTetrahedron[3],myOffset[2])
myTetrahedron=[myT0,myT3]
print("#",'{:.3f}'.format(myVolumeTetrahedron(myTetrahedron)))
#
myTetrahedron=[[0,10]]
myOffset     =[[1],[1],[1]      ]
myT0=my4Point_Intersection(myTetrahedron[0],'{:.3f}'.format(myVolumeTetrahedron(myTetrahedron)))
# (10*10)/2*10/3=166.667
# -166.667
# -119.877

②我在找有官方公式的网页

下面

我尝试使用 numpy。

from sympy import *
import numpy as np
def myIntersection_of_3_planes(a,c):
    ab = a.intersection(b)
    abc = ab[0].intersection(c)
    return abc[0]

def myUnitVector(C):
    return np.array(C)/sqrt(C[0]**2+C[1]**2+C[2]**2)

def my3Point_Offset(myT0,my03):
    mmy03=my03*np.array(myUnitVector(myCrossproduct(Matrix(myT1)-Matrix(myT0),Matrix(myT2)-Matrix(myT0))))
    return Matrix((np.array(myT0) - np.array(mmy03))[0]),\
           Matrix((np.array(myT1) - np.array(mmy03))[0]),\
           Matrix((np.array(myT2) - np.array(mmy03))[0])

def my4Point_Intersection(myT0,[1]     ]
myT0=my4Point_Intersection(myTetrahedron[0],'{:.3f}'.format(myVolumeTetrahedron(myTetrahedron)))
# (10*10)/2*10/3=166.667
# -166.667
# -165.517

解决方法

你会如何用微积分做这样的事情?在考虑 3 维空间之前,先考虑 2d:被直线切割的抛物线下的面积。

y1=(x-1)^2
y2=x

你可以很容易地想象面积是线的积分和抛物线的积分之差。

integral(y1) = 1/3(x-1)^3
integral(y2) = 1/2(x^2) ...

integral(y1)|(bounds) – integral(y2)|(bounds) = 1/3(x-1)^3 |(bounds) – 1/2(x^2) |(bounds)

但是,我们会注意到此示例包含 x 轴下方的负区域。这是可以用绝对值治愈的。

同样的原则适用于 n 维空间。在您的情况下,您的四面体是由 2d 形状切片的 3d 形状。使用绝对值将使您的形状保持在 x 轴上方(因此为正)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?