示例#1
0
bool UnserializeVortexLines(std::vector<VortexLine>& lines, std::string& info, const std::string& buf)
{
#if WITH_PROTOBUF
  PBVortexLines plines;
  if (!plines.ParseFromString(buf)) return false;

  for (int i=0; i<plines.lines_size(); i++) {
    VortexLine line;
    for (int j=0; j<plines.lines(i).vertices_size(); j++) 
      line.push_back(plines.lines(i).vertices(j));
    line.id = plines.lines(i).id();
    line.timestep = plines.lines(i).timestep();
    line.time = plines.lines(i).time();
    line.is_bezier = plines.lines(i).bezier();
    lines.push_back(line);
  }

  if (plines.has_info_bytes())
    info = plines.info_bytes();

  return true;
#else
  return false;
#endif
}
示例#2
0
double MinimumDist(const VortexLine& l0, const VortexLine& l1)
{
  double minDist = DBL_MAX;
  const int n0 = l0.size()/3, n1 = l1.size()/3;

  for (int i=0; i<n0; i++) 
    for (int j=0; j<n1; j++) {
      const double d[3] = {l0[i*3] - l1[j*3], l0[i*3+1] - l1[j*3+1], l0[i*3+2] - l1[j*3+2]};
      const double dist = sqrt(d[0]*d[0] + d[1]*d[1] + d[2]*d[2]);
      minDist = std::min(minDist, dist);
    }

  return minDist;
}
示例#3
0
float CrossingPoint(const VortexLine& l0, const VortexLine& l1, float X[3])
{
  float minDist = DBL_MAX;
  const int n0 = l0.size()/3, n1 = l1.size()/3;
  int i0, j0;

  for (int i=0; i<n0; i++) 
    for (int j=0; j<n1; j++) {
      const float d[3] = {l0[i*3] - l1[j*3], l0[i*3+1] - l1[j*3+1], l0[i*3+2] - l1[j*3+2]};
      const float dist = sqrt(d[0]*d[0] + d[1]*d[1] + d[2]*d[2]);
      if (minDist > dist) {
        i0 = i;
        j0 = j;
        minDist = dist;
      }
    }

  X[0] = l0[i0*3] + l1[j0*3];
  X[1] = l0[i0*3+1] + l1[j0*3+1];
  X[2] = l0[i0*3+2] + l1[j0*3+2];

  return minDist;
}