Skip to content

Commit 7b4186c

Browse files
Add equilateral arch. TODO: split lower right sub-plot into two and draw a lancet arch.
1 parent dc400fa commit 7b4186c

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

arches.c

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ void plot_ul(const double x0, const double y0, const double width, const double
1515
void threecentredarch(const double xc, const double y0, const double yc, const double d, const double r);
1616
void half_ellipse(const double x0, const double y0, const double a, const double b, const double theta);
1717
void plot_lr(const double x0, const double y0, const double width, const double height, const double r1, const double r2);
18+
void pointedarch(const double xc, const double y0, const double yc, const double d1, const double d2);
1819

1920

2021
int main(int argc, char * const argv[])
@@ -89,7 +90,6 @@ void plot_ur(const double x0, const double y0, const double width, const double
8990

9091
/* Thicker pen for outline of arch */
9192
// pencolr(1);
92-
// printf("VS5;\n");
9393

9494
circulararch(xc, y0, yc, r2);
9595
circulararch(xc, y0, yc, r2 * 1.15);
@@ -153,7 +153,6 @@ void plot_ul(const double x0, const double y0, const double width, const double
153153

154154
/* Thicker pen for outline of arch */
155155
// pencolr(1);
156-
// printf("VS5;\n");
157156

158157
threecentredarch(xc, y0, yc, r3, r4);
159158
threecentredarch(xc, y0, yc, r3, r4 * 1.3);
@@ -190,7 +189,6 @@ void plot_ll(const double x0, const double y0, const double width, const double
190189

191190
/* Thicker pen for outline of arch */
192191
// pencolr(1);
193-
// printf("VS5;\n");
194192

195193
ellipticalarch(xc, y0, yc, r1, r2);
196194
ellipticalarch(xc, y0, yc, r1 + thickness, r2 + thickness);
@@ -233,4 +231,40 @@ void half_ellipse(const double x0, const double y0, const double a, const double
233231

234232
void plot_lr(const double x0, const double y0, const double width, const double height, const double r1, const double r2)
235233
{
234+
const double xc = x0 + (width / 2.0);
235+
const double yc = y0 + (height / 2.0);
236+
const double d = r2 / 2.0;
237+
const double thickness = r2 / 10.0;
238+
239+
/* Centre lines */
240+
moveto(x0, yc);
241+
lineto(x0 + width, yc);
242+
moveto(xc, y0);
243+
lineto(xc, y0 + height);
244+
245+
/* Left-hand quarter-circle */
246+
moveto(xc - d, yc);
247+
arc(xc + d, yc, -90.0);
248+
249+
/* Right-hand quarter-circle */
250+
moveto(xc + d, yc);
251+
arc(xc - d, yc, 90.0);
252+
253+
/* Thicker pen for outline of arch */
254+
// pencolr(1);
255+
256+
pointedarch(xc, y0, yc, d, d);
257+
pointedarch(xc, y0, yc, d + thickness, d + thickness);
258+
}
259+
260+
261+
void pointedarch(const double xc, const double y0, const double yc, const double d1, const double d2)
262+
{
263+
const double degrees = acos(d2 / (d1 + d2)) * (180.0 / M_PI);
264+
265+
moveto(xc - d1, y0);
266+
lineto(xc - d1, yc);
267+
arc(xc + d2, yc, -degrees);
268+
arc(xc - d2, yc, -degrees);
269+
lineto(xc + d1, y0);
236270
}

0 commit comments

Comments
 (0)