void do_trap(void) { double short_side, long_side, height, area; printf("Please enter the length of the short side of the trapezoid: "); scanf("%lf", &short_side); printf("Please enter the length of the long side of the trapezoid: "); scanf("%lf", &long_side); printf("Please enter the height of the trapezoid: "); scanf("%lf", &height); area = trap_area(short_side, long_side, height); printf("The area of a trapezoid with a short side of %.2lf a long side of %.2lf\ and height %.2lf is %.2lf\n", short_side, long_side, height, area); }//do_trap
/* Generate stems. */ static int gx_san_generate_stems_aux(gx_device_spot_analyzer *padev, bool overall_hints, void *client_data, int (*handler)(void *client_data, gx_san_sect *ss)) { gx_san_trap *t0; const bool by_trap = false; int k; /* Overall hints : */ /* An overall hint designates an outer side of a glyph, being nearly parallel to a coordinate axis. It aligns a stem end rather than stem sides. See t1_hinter__overall_hstem. */ for (k = 0; overall_hints && k < 2; k++) { /* left, right. */ for (t0 = padev->trap_buffer; t0 != padev->trap_free; t0 = t0->link) { if (!t0->visited && (!k ? t0->leftmost : t0->rightmost)) { if (is_stem_boundaries(t0, 1 << k)) { gx_san_trap *t1 = t0, *tt = t0, *t = t0; int code; while (t->upper != NULL) { t = upper_neighbour(tt, k); if (!k ? !t->leftmost : !t->rightmost) { break; } if (!is_stem_boundaries(t, 1 << k)) { t->visited = true; break; } if ((!k ? tt->xltop : tt->xrtop) != (!k ? t->xlbot : t->xrbot)) break; /* Not a contigouos boundary. */ t->visited = true; tt = t; } if (!k ? !t->leftmost : !t->rightmost) continue; t1 = t; /* leftmost/rightmost boundary from t0 to t1. */ code = hint_by_tangent(padev, 1 << k, client_data, t0, t1, 0, handler); if (code < 0) return code; } } } for (t0 = padev->trap_buffer; t0 != padev->trap_free; t0 = t0->link) t0->visited = false; } /* Stem hints : */ for (t0 = padev->trap_buffer; t0 != padev->trap_free; t0 = t0->link) { if (!t0->visited) { if (is_stem_boundaries(t0, 3)) { gx_san_trap_contact *cont = t0->upper; gx_san_trap *t1 = t0, *t; double area = 0, length = 0, ave_width; while(cont != NULL && cont->next == cont /* <= 1 descendent. */) { gx_san_trap *t = cont->upper; if (!is_stem_boundaries(t, 3)) { t->visited = true; break; } if (t->fork > 1) break; /* > 1 accendents. */ if (t1->xltop != t->xlbot || t1->xrtop != t->xrbot) break; /* Not a contigouos boundary. */ t1 = t; cont = t1->upper; t1->visited = true; } /* We've got a stem suspection from t0 to t1. */ vd_quad(t0->xlbot, t0->ybot, t0->xrbot, t0->ybot, t1->xrtop, t1->ytop, t1->xltop, t1->ytop, 1, VD_STEM_COLOR); for (t = t0; ; t = t->upper->upper) { length += trap_axis_length(t); area += trap_area(t); if (t == t1) break; } ave_width = area / length; if (length > ave_width / ( 2.0 /* arbitrary */)) { /* We've got a stem from t0 to t1. */ int code = (by_trap ? hint_by_trap : hint_by_tangent)(padev, 3, client_data, t0, t1, ave_width, handler); if (code < 0) return code; } } } t0->visited = true; } return 0; }