삼각형의 면적을 계산
설명 : 오늘날, 더 우울 성공없이 시간에 따른 빛의 평균 곡률 흐름 패턴을 계산한다. (@. @)
지역을 찾을 벡터
바이두 백과 사전은 9 벡터 지역에있는 링크를 추구
double vfarea(MyMesh& mesh, MyMesh::VertexHandle vh) {
typedef typename MyMesh::Point p_t;
typedef typename MyMesh::VertexHandle vh_t;
typedef typename MyMesh::HalfedgeHandle hh_t;
typename MyMesh::VertexFaceIter vf_it;//点邻接的面
typename MyMesh::FaceVertexIter fv_it;//面上的点
double area = 0.0;
for (vf_it = mesh.vf_iter(vh); vf_it.is_valid(); ++vf_it) {//关于点邻接的面
fv_it = mesh.fv_iter(*vf_it);//得到面上的点
const p_t& P = mesh.point(*fv_it); ++fv_it;
const p_t& Q = mesh.point(*fv_it); ++fv_it;
const p_t& R = mesh.point(*fv_it);
area += ((Q - P) % (R - P)).norm() * 0.5f;//两个向量的叉乘的向量值的一半就是三角形的面积
}
cout << "[Debug] area is " << area << std::endl;
return fabs(area) > std::numeric_limits<double>::min() ? area : 1e-8;
}
크로스 제품 승산 점 OpenMesh 리드있다 항
참조 링크 , 공원 블로그
배운 :
Scalar length() const //compute euclidean norm
Scalar norm() const //compute euclidean norm
이것은 길이로부터 산출되는 sqrt (a*a + b*b + c*c)
길이
도트 크로스 제품 (내부 제품 외관 제품)
MyMesh::Normal p(1,-3,2), q(0,2,4);
cout<<"dot product : "<< (p | q) <<endl;
cout<<"cross product : "<< (p % q) <<endl;
向量 p(x1,y1,z1), q(x2,y2,z2)
点乘(内积):x1*x2 + y1*y2 + z1*z2
叉乘(外积):(y1*z2-y2*z1, x2*z1-x1*z2, x1*y2-x2*y1)
가져 오기
페이지를 | Q는 점이다
피의 % q를 십자가 제품입니다
헬렌 부가 방법 삼각형 영역 수식을 제공한다
소스 잔인 공식 바이두 백과 사전
double calcAreaOfThreePoints(const OpenMesh::Vec3f &a, const OpenMesh::Vec3f &b, const OpenMesh::Vec3f &c) {
//应用海伦公式 S=1/4sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
double lenA = sqrt(pow(b[0] - c[0], 2) + pow(b[1] - c[1], 2) + pow(b[2] - c[2], 2));// b - c 两点的坐标
double lenB = sqrt(pow(a[0] - c[0], 2) + pow(a[1] - c[1], 2) + pow(a[2] - c[2], 2));// a - c 两点的坐标
double lenC = sqrt(pow(b[0] - a[0], 2) + pow(b[1] - a[1], 2) + pow(b[2] - a[2], 2));// a - b 两点的坐标
double Area = 1.0 / 4.0 * sqrt((lenA + lenB + lenC) * (lenA + lenB - lenC) * (lenA + lenC - lenB) * (lenB + lenC - lenA));
return Area;
}