pie_slice.scad 800 B

12345678910111213141516171819202122232425
  1. module pie_slice(radius, start_angle, end_angle) {
  2. R = radius * sqrt(2) + 1;
  3. a0 = (4 * start_angle + 0 * end_angle) / 4;
  4. a1 = (3 * start_angle + 1 * end_angle) / 4;
  5. a2 = (2 * start_angle + 2 * end_angle) / 4;
  6. a3 = (1 * start_angle + 3 * end_angle) / 4;
  7. a4 = (0 * start_angle + 4 * end_angle) / 4;
  8. m = 2;
  9. if(end_angle > start_angle) {
  10. intersection() {
  11. circle(r=radius);
  12. polygon([
  13. [0,0],
  14. [R * m * cos(a0), R * m * sin(a0)],
  15. [R * m * cos(a1), R * m * sin(a1)],
  16. [R * m * cos(a2), R * m * sin(a2)],
  17. [R * m * cos(a3), R * m * sin(a3)],
  18. [R * m * cos(a4), R * m * sin(a4)],
  19. [0,0]
  20. ]);
  21. }
  22. } else {
  23. pie_slice(radius, end_angle, start_angle);
  24. }
  25. }