Exemple #1
0
/**
 * gts_triangle_perimeter:
 * @t: a #GtsTriangle.
 *
 * Returns: the perimeter of the triangle @t.
 */
gdouble gts_triangle_perimeter (GtsTriangle * t)
{
    GtsVertex * v;

    g_return_val_if_fail (t != NULL, 0.0);

    v = gts_triangle_vertex (t);
    return
        gts_point_distance (GTS_POINT (GTS_SEGMENT (t->e1)->v1),
                            GTS_POINT (GTS_SEGMENT (t->e1)->v2)) +
        gts_point_distance (GTS_POINT (GTS_SEGMENT (t->e1)->v1),
                            GTS_POINT (v)) +
        gts_point_distance (GTS_POINT (GTS_SEGMENT (t->e1)->v2),
                            GTS_POINT (v));
}
Exemple #2
0
static void surface_distance_foreach_boundary (GtsEdge * e,
					       gpointer * data)
{
  gdouble * delta = data[1];
  GtsRange * range = data[2];
  gdouble * total_length = data[3], length;
  GtsRange range_edge;

  if (gts_edge_is_boundary (e, NULL)) {
    GtsSegment * s =  GTS_SEGMENT (e);

    gts_bb_tree_segment_distance (data[0], s, data[4], *delta, &range_edge);

    if (range_edge.min < range->min)
      range->min = range_edge.min;
    if (range_edge.max > range->max)
      range->max = range_edge.max;
    range->n += range_edge.n;
    
    length = gts_point_distance (GTS_POINT (s->v1), GTS_POINT (s->v2));
    *total_length += length;
    range->sum += length*range_edge.mean;
    range->sum2 += length*range_edge.mean*range_edge.mean;
  }
}