📜  求不规则四面体体积的程序

📅  最后修改于: 2021-10-23 08:49:10             🧑  作者: Mango

给定不规则四面体的边长。任务是确定该四面体的体积。
设棱锥的边长为 u、U、v、V、w、W。

例子:

Input: u = 1000, v = 1000, w = 1000, U = 3, V = 4, W = 5
Output: 1999.9947

Input: u = 2000, v = 2000, w = 2000, U = 3, V = 4, W = 5
Output: 3999.9858

根据边长计算不规则四面体体积的公式是:
一 =
\begin{vmatrix} 0 & u*u & v*v & w*w & 1 \\ u*u & 0 & W*W & V*V & 1 \\ v*v & W*W & 0 & U*U & 1 \\ w*w & V*V & W*W & 0 & 1 \\ 1 & 1 & 1 & 1 & 0 \end{vmatrix}

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
#define db double
// Function to find the volume
void findVolume(db u, db v, db w, db U, db V, db W, db b)
{
 
    // Steps to calculate volume of a
    // Tetrahedron using formula
    db uPow = pow(u, 2);
    db vPow = pow(v, 2);
    db wPow = pow(w, 2);
    db UPow = pow(U, 2);
    db VPow = pow(V, 2);
    db WPow = pow(W, 2);
 
    db a = 4 * (uPow * vPow * wPow)
        - uPow * pow((vPow + wPow - UPow), 2)
        - vPow * pow((wPow + uPow - VPow), 2)
        - wPow * pow((uPow + vPow - WPow), 2)
        + (vPow + wPow - UPow) * (wPow + uPow - VPow)
        * (uPow + vPow - WPow);
    db vol = sqrt(a);
    vol /= b;
 
    cout << fixed << setprecision(4) << vol;
}
 
// Driver code
int main()
{
 
    // edge lengths
    db u = 1000, v = 1000, w = 1000;
    db U = 3, V = 4, W = 5;
    db b = 12;
 
    findVolume(u, v, w, U, V, W, b);
 
    return 0;
}


Java
// Java implementation of above approach
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
 
class GFG{
 
// Function to find the volume
static void findVolume(double u, double v, double w, double U,
                      double V, double W, double b)
{
 
    // Steps to calculate volume of a
    // Tetrahedron using formula
    double uPow = Math.pow(u, 2);
    double vPow = Math.pow(v, 2);
    double wPow = Math.pow(w, 2);
    double UPow = Math.pow(U, 2);
    double VPow = Math.pow(V, 2);
    double WPow = Math.pow(W, 2);
 
    double a = 4 * (uPow * vPow * wPow)
        - uPow * Math.pow((vPow + wPow - UPow), 2)
        - vPow * Math.pow((wPow + uPow - VPow), 2)
        - wPow * Math.pow((uPow + vPow - WPow), 2)
        + (vPow + wPow - UPow) * (wPow + uPow - VPow)
        * (uPow + vPow - WPow);
    double vol = Math.sqrt(a);
    vol /= b;
 
    System.out.printf("%.4f",vol);
}
 
// Driver code
public static void main(String args[])
{
 
    // edge lengths
    double u = 1000, v = 1000, w = 1000;
    double U = 3, V = 4, W = 5;
    double b = 12;
 
    findVolume(u, v, w, U, V, W, b);
}
     
}


Python3
# Python 3 implementation of above approach
 
# from math lib import everything
from math import *
 
# Function to find the volume
def findVolume(u, v, w, U, V, W, b) :
   
    # Steps to calculate volume of a
    # Tetrahedron using formula
    uPow = pow(u, 2)
    vPow = pow(v, 2)
    wPow = pow(w, 2)
    UPow = pow(U, 2)
    VPow = pow(V, 2)
    WPow = pow(W, 2)
   
    a = (4 * (uPow * vPow * wPow)
        - uPow * pow((vPow + wPow - UPow), 2)
        - vPow * pow((wPow + uPow - VPow), 2)
        - wPow * pow((uPow + vPow - WPow), 2)
        + (vPow + wPow - UPow) * (wPow + uPow - VPow)
        * (uPow + vPow - WPow))
         
    vol = sqrt(a)
    vol /= b
   
    print(round(vol,4))
  
# Driver code    
if __name__ == "__main__" :
 
    # edge lengths
    u, v, w = 1000, 1000, 1000
    U, V, W = 3, 4, 5
    b = 12
   
    findVolume(u, v, w, U, V, W, b)
 
 
# This code is contributed by ANKITRAI1


C#
// C# implementation of above approach
using System;
 
class GFG
{
 
// Function to find the volume
static void findVolume(double u, double v,
                       double w, double U,
                       double V, double W,
                       double b)
{
 
    // Steps to calculate volume of a
    // Tetrahedron using formula
    double uPow = Math.Pow(u, 2);
    double vPow = Math.Pow(v, 2);
    double wPow = Math.Pow(w, 2);
    double UPow = Math.Pow(U, 2);
    double VPow = Math.Pow(V, 2);
    double WPow = Math.Pow(W, 2);
 
    double a = 4 * (uPow * vPow * wPow) -
                    uPow * Math.Pow((vPow + wPow - UPow), 2) -
                    vPow * Math.Pow((wPow + uPow - VPow), 2) -
                    wPow * Math.Pow((uPow + vPow - WPow), 2) +
                    (vPow + wPow - UPow) *
                    (wPow + uPow - VPow) * (uPow + vPow - WPow);
    double vol = Math.Sqrt(a);
    vol /= b;
 
    Console.Write(System.Math.Round(vol, 4));
}
 
// Driver code
public static void Main()
{
 
    // edge lengths
    double u = 1000, v = 1000, w = 1000;
    double U = 3, V = 4, W = 5;
    double b = 12;
 
    findVolume(u, v, w, U, V, W, b);
}
}
 
// This code is contributed
// by ChitraNayal


PHP


Javascript


输出:
1999.9947

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程