计算在C++中面临正常
Computing face normal in C++
我正在尝试计算每张脸的法线。
void myFace::computeNormal()
{
myHalfedge* e1 = adjacent_halfedge;
myHalfedge* e2 = e1->prev;
myVertex* v1 = e1->source;
myVertex* v2 = e2->source;
myVertex* v3 = (e1->next)->source;
myPoint3D* p1 = v1->point;
myPoint3D* p2 = v2->point;
myPoint3D* p3 = v3->point;
myVector3D vect1 = *p3-*p1;
myVector3D vect2 = *p2-*p1;
normal = &vect1.crossproduct(vect2);
}
void myMesh::computeNormals()
{
myFace* f = NULL;
for (int i = 0; i < faces.size(); i++)
{
f = faces[i];
f->computeNormal();
}
}
但是,当调用f->computeNormal();
时,所有以前的值都将替换为最后一个计算值。谁能给我一个建议,应该出什么问题?
编辑(添加了交叉产品)
void myVector3D::crossproduct(myVector3D & v1, myVector3D & v2)
{
dX = v1.dY * v2.dZ - v1.dZ * v2.dY;
dY = v1.dZ * v2.dX - v1.dX * v2.dZ;
dZ = v1.dX * v2.dY - v1.dY * v2.dX;
}
myVector3D myVector3D::crossproduct(myVector3D & v1)
{
myVector3D result;
result.crossproduct(*this, v1);
return result;
}
罪魁祸首可能是"normal = &vect1.crossproduct(vect2)"。函数调用"crossproduct"的值只是函数"computeNormal"中的临时值。退出函数后,此变量将变为无效。因此,指向它的指针"正常"指向垃圾值。您可以使用"myVector3D normal"而不是"myVector3D *normal"。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 如何计算多映射中重复对的数量