PatchOffset.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //修偏移
  2. export default class PatchOffset {
  3. static PI = Math.PI
  4. static PEN_DISTANCE(penType) {
  5. switch (penType) {
  6. case 111:
  7. return 2.9413
  8. case 201:
  9. return 2.9413
  10. case 130:
  11. return 2.8
  12. default:
  13. return 2.8
  14. }
  15. }
  16. static PEN_SIZE(penSize) {
  17. switch (penSize) {
  18. case 12:
  19. return 1.524
  20. case 16:
  21. return 2.031
  22. default:
  23. return 1.524
  24. }
  25. }
  26. //
  27. constructor(penType, penSize) {
  28. //距离
  29. this.distance = PatchOffset.PEN_DISTANCE(penType)
  30. //间距
  31. this.size = PatchOffset.PEN_SIZE(penSize)
  32. //
  33. this.angleX = 0
  34. //
  35. this.angleY = 0
  36. //
  37. this.lastAngle = 0
  38. }
  39. /**
  40. * @name
  41. * @param {Number} currentAngle 当前角度
  42. */
  43. angleToOffsetX(currentAngle) {
  44. //弧度
  45. const radian = Math.PI * (currentAngle + 180 % 360) / 180
  46. let angleOffsetX = (this.distance * Math.cos(radian))
  47. angleOffsetX /= this.size
  48. return angleOffsetX
  49. }
  50. //修复 y 偏移
  51. angleToOffsetY(currentAngle) {
  52. //弧度
  53. const radian = Math.PI * (currentAngle + 180 % 360) / 180
  54. let angleOffsetY = this.distance * Math.sin(radian) * -1
  55. angleOffsetY /= this.size
  56. return angleOffsetY
  57. }
  58. //
  59. angleAndSensitivityLevelCheck(dot) {
  60. let xa = 0
  61. let xb = 0
  62. let ya = 0
  63. let yb = 0
  64. if (dot.dotType === 'PEN_DOWN') {
  65. this.angleX = this.angleToOffsetX(dot.angle)
  66. this.angleY = this.angleToOffsetY(dot.angle)
  67. }
  68. xa = this.angleX
  69. xb = ((this.angleX - xa) * 100)
  70. ya = this.angleY
  71. yb = ((this.angleY - ya) * 100)
  72. dot.x -= xa
  73. dot.y -= xb
  74. if (dot.fx < 0) {
  75. dot.fx += 100
  76. dot.x -= 1
  77. } else if (dot.fx >= 100) {
  78. dot.fx -= 100
  79. dot.x += 1
  80. }
  81. dot.y -= ya
  82. dot.fy -= yb
  83. if (dot.fy < 0) {
  84. dot.fy += 100
  85. dot.y -= 1
  86. } else if (dot.fy >= 100) {
  87. dot.fy -= 100
  88. dot.y += 1
  89. }
  90. dot.ab_x = dot.x + dot.fx / 100
  91. dot.ab_y = dot.y + dot.fy / 100
  92. return dot
  93. }
  94. }