ModelHandle/source/model/quantities.js

39 lines
970 B
JavaScript

OV.GetTriangleArea = function (v0, v1, v2)
{
const a = OV.CoordDistance3D (v0, v1);
const b = OV.CoordDistance3D (v1, v2);
const c = OV.CoordDistance3D (v0, v2);
const s = (a + b + c) / 2.0;
const areaSquare = s * (s - a) * (s - b) * (s - c);
if (areaSquare < 0.0) {
return 0.0;
}
return Math.sqrt (areaSquare);
};
OV.GetTetrahedronSignedVolume = function (v0, v1, v2)
{
return OV.DotVector3D (v0, OV.CrossVector3D (v1, v2)) / 6.0;
};
OV.CalculateVolume = function (object3D)
{
if (!OV.IsSolid (object3D)) {
return null;
}
let volume = 0.0;
object3D.EnumerateTriangleVertices ((v0, v1, v2) => {
volume += OV.GetTetrahedronSignedVolume (v0, v1, v2);
});
return volume;
};
OV.CalculateSurfaceArea = function (object3D)
{
let surface = 0.0;
object3D.EnumerateTriangleVertices ((v0, v1, v2) => {
surface += OV.GetTriangleArea (v0, v1, v2);
});
return surface;
};