-
-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Idea: Inclination-based "sectors" #440
Comments
As a bit of undirected brainstorming: For stability (position measurement noise in high frequency touch events) the incident angle at the circle boundary should most likely be inferred from more than just the 2 last touch events. The easiest and most straight-forward method would probably be taking an weighted average of the angles between the last point and several points before that. The further away the respective 2nd point, the more stable the inferred inclination -- but of course also less relevant. I'll try to come up with an implementation which is appropriately simple (and doesn't rely on maintaining a variable-length list of previous points, like this naive approach). |
With several months of experience of using the adaptive ("dynamic") circle, I think I could develop a good grasp of where problems remain and what is needed to create a more reliable input experience, using the (so far unusused) inclination data. It should be mentioned that the following does not require a stabilization of the trajectory. This is about how we detect the return into the circle from one of the sectors! By using inclination information, we should be able to prevent accidental returns into the circle. "Traditonally", accidental returns into the circle by cutting across the circle prematurely, look something like this: Here, we accidentally returned from the upper sector into the circle. They occur when we don't take the time to perform a well rounded circle, but are too hasty. If they happen, too often, we so far have two knobs to turn to address this:
Looking at the picture above, it is intuitively evident that the trajectory did not mean to return into the upper circle. That intuition comes from the fact that the trajectory did not aim towards the circle at that point; the inclination was too low, it went tangentially to the boundary. Therefore, we should add a condition for the detection of the return from a given sector into the circle: To count as a return from a sector into the circle, the trajectory must be pointing towards the circle center (i.e. the inclination be 90°) within an error of ± Here, the first crossing into the circle in the upper sector is ignored, because the trajectory/tangent (blue) does not lie within the permitted range (green triangle) around the ray into the circle center (green line). The second crossing from the left sector, however, is detected, because the inclination is sufficiently high. Although we could, at this point, detect the "return into the circle" (i.e. termination of a sequence) without any notion of the circle, we will want to keep it around as an upper limit to inclination detection, so as to not fall off the other side of the problem, and accidentally detect termination from a steep inclination, like here: However, we should still improve the rule to deal with reversal (a.k.a. "variants", "layers"), because those will, if accidentally performed within the diameter of the circle, trigger the inclination detection (either unstably or because the reversal turned towards the circle center): A detection will occur, if the sufficient inclination (90 ± Concretely, we check the inclination at every touch/move event (coming from the last touch event). If it reaches 90 ± Comments and questions or so (in case this was too confusing) welcome! PS: The part about traversal distance is what makes stabilization superfluous. |
Since #304 gained some momentum with @MaethorNaur and @flide being generally positive about the idea, I thought it would be best to split out the proposal which I made in #304 (comment) into a separate thread for discussion:
As stated:
The text was updated successfully, but these errors were encountered: