gpt4 book ai didi

javascript - 0 分割的体积计算不正确

转载 作者:行者123 更新时间:2023-11-30 06:36:07 28 4
gpt4 key购买 nike

我最近提交了一个关于体积计算的问题,在 this thread 得到了一些很大的帮助并且开发了一个函数来计算 Three JS 中闭合网格的体积。对于 Face3 网格,变量 face4 是一个 true/false,它将面分成两个三 Angular 形。我的几何图形主要是自定义 Face4 结构。

    function volumeCalc(object, face4){

if (face4 == false) {

for (var i=0; i<object.geometry.faces.length; i++) {

var pA = (object.geometry.faces[i].a);
var qA = (object.geometry.faces[i].b);
var rA = (object.geometry.faces[i].c);

var Px = object.geometry.vertices[pA].x;
var Py = object.geometry.vertices[pA].y;
var Pz = object.geometry.vertices[pA].z;

Pxlist.push(Px);
Pylist.push(Py);
Pzlist.push(Pz);

var Qx = object.geometry.vertices[qA].x;
var Qy = object.geometry.vertices[qA].y;
var Qz = object.geometry.vertices[qA].z;

Qxlist.push(Qx);
Qylist.push(Qy);
Qzlist.push(Qz);

var Rx = object.geometry.vertices[rA].x;
var Ry = object.geometry.vertices[rA].y;
var Rz = object.geometry.vertices[rA].z;

Rxlist.push(Rx);
Rxlist.push(Ry);
Rzlist.push(Rz);
}
} else {
for (var i=0; i<object.geometry.faces.length; i++) {

var pA = (object.geometry.faces[i].b);
var qA = (object.geometry.faces[i].c);
var rA = (object.geometry.faces[i].d);

var Px = object.geometry.vertices[pA].x;
var Py = object.geometry.vertices[pA].y;
var Pz = object.geometry.vertices[pA].z;

Pxlist.push(Px);
Pylist.push(Py);
Pzlist.push(Pz);

var Qx = object.geometry.vertices[qA].x;
var Qy = object.geometry.vertices[qA].y;
var Qz = object.geometry.vertices[qA].z;

Qxlist.push(Qx);
Qylist.push(Qy);
Qzlist.push(Qz);

var Rx = object.geometry.vertices[rA].x;
var Ry = object.geometry.vertices[rA].y;
var Rz = object.geometry.vertices[rA].z;

Rxlist.push(Rx);
Rxlist.push(Ry);
Rzlist.push(Rz);
}
}
for (i=0;i < Pxlist.length; i++){

pv = Pxlist[i]*Qylist[i]*Rzlist[i]; + Pylist[i]*Qzlist[i]*Rxlist[i]; + Pzlist[i]*Qxlist[i]*Rylist[i]; - Pxlist[i]*Qzlist[i]*Rylist[i]; - Pylist[i]*Qxlist[i]*Rzlist[i]; -Pzlist[i]*Qylist[i]*Rxlist[i];
pvlist.push(pv);

}

// calculate the total of these, I'm using _.js to add all values in the list.

addUp = (_.reduce(pvlist, function(memo, num){ return memo + num; }, 0))/6;

这是基于公式

pv =  Px*Qy*Rz + Py*Qz*Rx + Pz*Qx*Ry - Px*Qz*Ry - Py*Qx*Rz - Pz*Qy*Rx;

在创建网格之前,我在 THREE.Geometry 上执行以下操作:

geom.mergeVertices();
geom.computeCentroids();
geom.computeFaceNormals();
geom.computeVertexNormals();

var modifier = new THREE.SubdivisionModifier( x );

modifier.modify( geom );

在 x > 0 的所有分割情况下,体积计算都是正确的。当 x = 0 或没有 Subdivision 时,它是不正确的,数量级。

有什么想法吗?也将感谢有关如何清理供他人使用的功能的建议,这是我第一次尝试开源贡献。谢谢。

最佳答案

“x”是用户定义的变量吗?如果为 0,则不通过分割修饰符传递几何体。

关于javascript - 0 分割的体积计算不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386554/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com