filter.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. class Filter {
  2. N = 4
  3. num = 10
  4. dataArray = null
  5. // 初始化
  6. constructor() {
  7. this.dataArray = []
  8. }
  9. // 初始化队列
  10. initQueue() {
  11. this.dataArray = []
  12. }
  13. // 在队列首插入队列
  14. addQueueFront(value) {
  15. this.dataArray.unshift(value)
  16. }
  17. // 队列求和
  18. sumQueue() {
  19. let sum = 0
  20. for (let index = 0; index < this.N; index++) {
  21. sum += this.dataArray[index]
  22. }
  23. return sum
  24. }
  25. Smoothing_arithmetic_mean_FILTER() {
  26. let m = 0
  27. let re = 0
  28. let adder = 0
  29. for (let i = 0; i < this.N; i++) {
  30. if (this.dataArray[i] > 0) {
  31. adder += this.dataArray[i]
  32. m++
  33. }
  34. }
  35. if (m >= this.N) {
  36. re = this.sumQueue() / this.N
  37. } else {
  38. re = adder / m
  39. }
  40. return re
  41. }
  42. }
  43. //
  44. function joinTogether(x, fx) {
  45. return x + fx / 100
  46. }
  47. const dataFilterX = new Filter()
  48. const datafilterY = new Filter()
  49. function smooth(dot) {
  50. let dotX = joinTogether(dot.x, dot.fx)
  51. let dotY = joinTogether(dot.y, dot.fy)
  52. if (dot.dotType === 'PEN_DOWN') {
  53. dataFilterX.initQueue()
  54. datafilterY.initQueue()
  55. dataFilterX.addQueueFront(dotX)
  56. // console.log(dataFilterX.dataArray);
  57. datafilterY.addQueueFront(dotY)
  58. // console.log(datafilterY.dataArray);
  59. let dotAx = dataFilterX.Smoothing_arithmetic_mean_FILTER()
  60. let dotAy = datafilterY.Smoothing_arithmetic_mean_FILTER()
  61. return {
  62. ...dot,
  63. ab_x: dotAx,
  64. ab_y: dotAy
  65. }
  66. } else if (dot.dotType === "PEN_MOVE" && dot.force !== 1 && dot.force !== 2) {
  67. dataFilterX.addQueueFront(dotX)
  68. // console.log(dataFilterX.dataArray);
  69. datafilterY.addQueueFront(dotY)
  70. // console.log(datafilterY.dataArray);
  71. let dotAx = dataFilterX.Smoothing_arithmetic_mean_FILTER()
  72. let dotAy = datafilterY.Smoothing_arithmetic_mean_FILTER()
  73. return {
  74. ...dot,
  75. ab_x: dotAx,
  76. ab_y: dotAy
  77. }
  78. } else if (dot.tydotTypepe == "PEN_UP" || dot.force === 2 || dot.force === 1 || dot.force === 0) {
  79. let dotAx = dotX
  80. let dotAy = dotY
  81. return {
  82. ...dot,
  83. ab_x: dotAx,
  84. ab_y: dotAy
  85. }
  86. }
  87. }
  88. export default smooth