Example #1
0
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;
}
Example #2
0
double QgsRegularPolygon::interiorAngle() const
{
  return interiorAngle( mNumberSides );
}