From feb0e351b613012bdc87434d054410e9899754c5 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 20 May 2019 15:04:13 +0800 Subject: [PATCH] add doc --- docs/images/lib-bijection_offset-1.JPG | Bin 0 -> 36392 bytes docs/images/lib-bijection_offset-2.JPG | Bin 0 -> 39823 bytes docs/lib-bijection_offset.md | 67 +++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 docs/images/lib-bijection_offset-1.JPG create mode 100644 docs/images/lib-bijection_offset-2.JPG create mode 100644 docs/lib-bijection_offset.md diff --git a/docs/images/lib-bijection_offset-1.JPG b/docs/images/lib-bijection_offset-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..c3859a1f66d0a409f37f18a015b9215740f7dbad GIT binary patch literal 36392 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 literal 0 HcmV?d00001 diff --git a/docs/images/lib-bijection_offset-2.JPG b/docs/images/lib-bijection_offset-2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..bf22507969008319b76ee8ae30245aecf3ef1967 GIT binary patch literal 39823 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 + + shape = [ + [15, 0], + [15, 30], + [0, 20], + [-15, 40], + [-15, 0] + ]; + + color("red") polygon(bijection_offset(shape, 3)); + color("orange") polygon(bijection_offset(shape, 2)); + color("yellow") polygon(bijection_offset(shape, 1)); + color("green") polygon(shape); + color("blue") polygon(bijection_offset(shape, -1)); + color("indigo") polygon(bijection_offset(shape, -2)); + color("purple") polygon(bijection_offset(shape, -3)); + +![bijection_offset](images/lib-bijection_offset-1.JPG) + + include ; + include ; + include ; + include ; + include ; + + shape = [ + [5, 0], + [3, 9], + [0, 10], + [-5, 0] + ]; + offsetted = bijection_offset(shape, 1); + + offsetted2 = bijection_offset(shape, 2); + offsetted3 = bijection_offset(shape, 3); + + t_step = 0.05; + + p0 = [0, 0, 0]; + p1 = [40, 60, 35]; + p2 = [-50, 70, 0]; + p3 = [20, 150, -35]; + p4 = [30, 50, -3]; + + path_pts = bezier_curve(t_step, + [p0, p1, p2, p3, p4] + ); + + path_extrude(concat(shape, offsetted), path_pts, "HOLLOW"); + path_extrude(concat(offsetted2, offsetted3), path_pts, "HOLLOW"); + +![bijection_offset](images/lib-bijection_offset-2.JPG) +