FingerSlice.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using bbiwarg.Utility;
  7. namespace bbiwarg.Recognition.FingerRecognition
  8. {
  9. class FingerSlice
  10. {
  11. private LineSegment2D lineSegment;
  12. private bool lineSegmentUpToDate;
  13. public Vector2D Mid { get; private set; }
  14. public Vector2D Start { get; private set; }
  15. public Vector2D StartOuter { get; private set; }
  16. public Vector2D End { get; private set; }
  17. public Vector2D EndOuter { get; private set; }
  18. public LineSegment2D LineSegment { get { if (!lineSegmentUpToDate) updateLineSegment(); return lineSegment; } }
  19. public Vector2D Direction { get { return LineSegment.Direction; } }
  20. public float Length { get { return LineSegment.Length; } }
  21. public FingerSlice(Vector2D start, Vector2D end)
  22. {
  23. Start = start;
  24. End = end;
  25. Mid = (start + end) / 2;
  26. updateLineSegment();
  27. StartOuter = (Start + Constants.FingerSliceOutMargin * Direction.getInverse()).moveInBound(Vector2D.Zero, Constants.MaxPixel, Direction);
  28. EndOuter = (End + Constants.FingerSliceOutMargin * Direction).moveInBound(Vector2D.Zero, Constants.MaxPixel, Direction.getInverse());
  29. }
  30. private void updateLineSegment()
  31. {
  32. lineSegment = new LineSegment2D(Start, End);
  33. lineSegmentUpToDate = true;
  34. }
  35. }
  36. }