circle.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { distance, piMod } from './util';
  2. export default {
  3. /**
  4. * 计算包围盒
  5. * @param {number} x 圆心 x
  6. * @param {number} y 圆心 y
  7. * @param {number} r 半径
  8. * @return {object} 包围盒
  9. */
  10. box: function (x, y, r) {
  11. return {
  12. x: x - r,
  13. y: y - r,
  14. width: 2 * r,
  15. height: 2 * r,
  16. };
  17. },
  18. /**
  19. * 计算周长
  20. * @param {number} x 圆心 x
  21. * @param {number} y 圆心 y
  22. * @param {number} r 半径
  23. * @return {number} 周长
  24. */
  25. length: function (x, y, r) {
  26. return Math.PI * 2 * r;
  27. },
  28. /**
  29. * 根据比例获取点
  30. * @param {number} x 圆心 x
  31. * @param {number} y 圆心 y
  32. * @param {number} r 半径
  33. * @param {number} t 指定比例,x轴方向为 0
  34. * @return {object} 点
  35. */
  36. pointAt: function (x, y, r, t) {
  37. var angle = Math.PI * 2 * t;
  38. return {
  39. x: x + r * Math.cos(angle),
  40. y: y + r * Math.sin(angle),
  41. };
  42. },
  43. /**
  44. * 点到圆的距离
  45. * @param {number} x 圆心 x
  46. * @param {number} y 圆心 y
  47. * @param {number} r 半径
  48. * @param {number} x0 指定的点 x
  49. * @param {number} y0 指定的点 y
  50. * @return {number} 距离
  51. */
  52. pointDistance: function (x, y, r, x0, y0) {
  53. return Math.abs(distance(x, y, x0, y0) - r);
  54. },
  55. /**
  56. * 根据比例计算切线角度
  57. * @param {number} x 圆心 x
  58. * @param {number} y 圆心 y
  59. * @param {number} r 半径
  60. * @param {number} t 指定比例 0 - 1 之间,x轴方向为 0。在 0-1 范围之外是循环还是返回 null,还需要调整
  61. * @return {number} 角度,在 0 - 2PI 之间
  62. */
  63. tangentAngle: function (x, y, r, t) {
  64. var angle = Math.PI * 2 * t;
  65. return piMod(angle + Math.PI / 2);
  66. },
  67. };
  68. //# sourceMappingURL=circle.js.map