std::vector<VisusIndexedData::VertexDataType> VisusIndexedData::weightedNormal(const std::vector<VertexDataType>& u, const std::vector<VertexDataType>& v, const std::vector<VertexDataType>& w) const { std::vector<VertexDataType> n(3); VertexDataType mag; VertexDataType weight; n[0] = (u[1] - v[1])*(w[2]-v[2]) - (u[2] - v[2])*(w[1] - v[1]); n[1] = (u[2] - v[2])*(w[0]-v[0]) - (u[0] - v[0])*(w[2] - v[2]); n[2] = (u[0] - v[0])*(w[1]-v[1]) - (u[1] - v[1])*(w[0] - v[0]); mag = n[0]*n[0] + n[1]*n[1] + n[2]*n[2]; weight = interiorAngle(u,v,w); //weight = 1; if (mag > 10e-8) { mag = weight/sqrt(mag); n[0] *= mag; n[1] *= mag; n[2] *= mag; } else { n[0] = 0; n[1] = 0; n[2] = weight; } //fprintf(stderr,"Normal %f %f %f \n",n[0],n[1],n[2]); return n; }
double QgsRegularPolygon::interiorAngle() const { return interiorAngle( mNumberSides ); }