Fixed velocity computation in Throwable
This commit is contained in:
parent
cc49df6e55
commit
8752d47e01
35
dist/iwmlib.js
vendored
35
dist/iwmlib.js
vendored
@ -1687,12 +1687,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
class InteractionDelta {
|
class InteractionDelta {
|
||||||
constructor(x, y, zoom, rotate, about) {
|
/**
|
||||||
|
*Creates an instance of InteractionDelta.
|
||||||
|
* @param {*} x
|
||||||
|
* @param {*} y
|
||||||
|
* @param {*} zoom
|
||||||
|
* @param {*} rotate
|
||||||
|
* @param {*} about
|
||||||
|
* @param {*} number - number of involved pointer
|
||||||
|
* @memberof InteractionDelta
|
||||||
|
*/
|
||||||
|
constructor(x, y, zoom, rotate, about, number) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.zoom = zoom;
|
this.zoom = zoom;
|
||||||
this.rotate = rotate;
|
this.rotate = rotate;
|
||||||
this.about = about;
|
this.about = about;
|
||||||
|
this.number = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
@ -1766,16 +1777,13 @@
|
|||||||
let p1 = this.previous.get(c1.key);
|
let p1 = this.previous.get(c1.key);
|
||||||
let p2 = this.previous.get(c2.key);
|
let p2 = this.previous.get(c2.key);
|
||||||
|
|
||||||
//let p1 = previous[0]
|
|
||||||
//let p2 = previous[1]
|
|
||||||
|
|
||||||
let d1 = Points.subtract(c1, p1);
|
let d1 = Points.subtract(c1, p1);
|
||||||
let d2 = Points.subtract(c2, p2);
|
let d2 = Points.subtract(c2, p2);
|
||||||
let cm = Points.mean(c1, c2);
|
let cm = Points.mean(c1, c2);
|
||||||
//let pm = Points.mean(p1, p2)
|
|
||||||
// UO: Using the mean lead to jumps between time slices with 3 and 2 fingers
|
// Using the mean leads to jumps between time slices with 3 and 2 fingers
|
||||||
// We use the mean of deltas instead
|
// We use the mean of deltas instead
|
||||||
let delta = Points.mean(d1, d2); //Points.subtract(cm, pm)
|
let delta = Points.mean(d1, d2);
|
||||||
let zoom = 1.0;
|
let zoom = 1.0;
|
||||||
let distance1 = Points.distance(p1, p2);
|
let distance1 = Points.distance(p1, p2);
|
||||||
let distance2 = Points.distance(c1, c2);
|
let distance2 = Points.distance(c1, c2);
|
||||||
@ -1785,13 +1793,14 @@
|
|||||||
let currentAngle = Points.angle(c1, c2);
|
let currentAngle = Points.angle(c1, c2);
|
||||||
let previousAngle = Points.angle(p1, p2);
|
let previousAngle = Points.angle(p1, p2);
|
||||||
let alpha = this.diffAngle(currentAngle, previousAngle);
|
let alpha = this.diffAngle(currentAngle, previousAngle);
|
||||||
return new InteractionDelta(delta.x, delta.y, zoom, alpha, cm)
|
return new InteractionDelta(delta.x, delta.y, zoom, alpha, cm, csize)
|
||||||
} else if (csize == 1 && psize == 1 && this.current.firstKey() == this.previous.firstKey()) {
|
} else if (csize == 1 && psize == 1 && this.current.firstKey() == this.previous.firstKey()) {
|
||||||
// We need to ensure that the keys are the same
|
// We need to ensure that the keys are the same, since single points with different keys
|
||||||
|
// can jump
|
||||||
let current = this.current.first();
|
let current = this.current.first();
|
||||||
let previous = this.previous.first();
|
let previous = this.previous.first();
|
||||||
let delta = Points.subtract(current, previous);
|
let delta = Points.subtract(current, previous);
|
||||||
return new InteractionDelta(delta.x, delta.y, 1.0, 0.0, current)
|
return new InteractionDelta(delta.x, delta.y, 1.0, 0.0, current, csize)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -2940,7 +2949,9 @@
|
|||||||
this.lastframe = t;
|
this.lastframe = t;
|
||||||
if (dt > 0) {
|
if (dt > 0) {
|
||||||
// Avoid division by zero errors later on
|
// Avoid division by zero errors later on
|
||||||
let velocity = { t: t, dt: dt, dx: delta.x, dy: delta.y };
|
// and consider the number of involved pointers sind addVelocity will be called by the
|
||||||
|
// onMove events
|
||||||
|
let velocity = { t: t, dt: dt, dx: delta.x / delta.number, dy: delta.y / delta.number};
|
||||||
this.velocities.push(velocity);
|
this.velocities.push(velocity);
|
||||||
while (this.velocities.length > buffer) {
|
while (this.velocities.length > buffer) {
|
||||||
this.velocities.shift();
|
this.velocities.shift();
|
||||||
@ -2949,7 +2960,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
meanVelocity(milliseconds = 30) {
|
meanVelocity(milliseconds = 30) {
|
||||||
this.addVelocity({ x: 0, y: 0 });
|
this.addVelocity({ x: 0, y: 0, number: 1 });
|
||||||
let sum = { x: 0, y: 0 };
|
let sum = { x: 0, y: 0 };
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let t = 0;
|
let t = 0;
|
||||||
|
35
dist/iwmlib.pixi.js
vendored
35
dist/iwmlib.pixi.js
vendored
@ -4851,12 +4851,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
class InteractionDelta {
|
class InteractionDelta {
|
||||||
constructor(x, y, zoom, rotate, about) {
|
/**
|
||||||
|
*Creates an instance of InteractionDelta.
|
||||||
|
* @param {*} x
|
||||||
|
* @param {*} y
|
||||||
|
* @param {*} zoom
|
||||||
|
* @param {*} rotate
|
||||||
|
* @param {*} about
|
||||||
|
* @param {*} number - number of involved pointer
|
||||||
|
* @memberof InteractionDelta
|
||||||
|
*/
|
||||||
|
constructor(x, y, zoom, rotate, about, number) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.zoom = zoom;
|
this.zoom = zoom;
|
||||||
this.rotate = rotate;
|
this.rotate = rotate;
|
||||||
this.about = about;
|
this.about = about;
|
||||||
|
this.number = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
@ -4930,16 +4941,13 @@
|
|||||||
let p1 = this.previous.get(c1.key);
|
let p1 = this.previous.get(c1.key);
|
||||||
let p2 = this.previous.get(c2.key);
|
let p2 = this.previous.get(c2.key);
|
||||||
|
|
||||||
//let p1 = previous[0]
|
|
||||||
//let p2 = previous[1]
|
|
||||||
|
|
||||||
let d1 = Points.subtract(c1, p1);
|
let d1 = Points.subtract(c1, p1);
|
||||||
let d2 = Points.subtract(c2, p2);
|
let d2 = Points.subtract(c2, p2);
|
||||||
let cm = Points.mean(c1, c2);
|
let cm = Points.mean(c1, c2);
|
||||||
//let pm = Points.mean(p1, p2)
|
|
||||||
// UO: Using the mean lead to jumps between time slices with 3 and 2 fingers
|
// Using the mean leads to jumps between time slices with 3 and 2 fingers
|
||||||
// We use the mean of deltas instead
|
// We use the mean of deltas instead
|
||||||
let delta = Points.mean(d1, d2); //Points.subtract(cm, pm)
|
let delta = Points.mean(d1, d2);
|
||||||
let zoom = 1.0;
|
let zoom = 1.0;
|
||||||
let distance1 = Points.distance(p1, p2);
|
let distance1 = Points.distance(p1, p2);
|
||||||
let distance2 = Points.distance(c1, c2);
|
let distance2 = Points.distance(c1, c2);
|
||||||
@ -4949,13 +4957,14 @@
|
|||||||
let currentAngle = Points.angle(c1, c2);
|
let currentAngle = Points.angle(c1, c2);
|
||||||
let previousAngle = Points.angle(p1, p2);
|
let previousAngle = Points.angle(p1, p2);
|
||||||
let alpha = this.diffAngle(currentAngle, previousAngle);
|
let alpha = this.diffAngle(currentAngle, previousAngle);
|
||||||
return new InteractionDelta(delta.x, delta.y, zoom, alpha, cm)
|
return new InteractionDelta(delta.x, delta.y, zoom, alpha, cm, csize)
|
||||||
} else if (csize == 1 && psize == 1 && this.current.firstKey() == this.previous.firstKey()) {
|
} else if (csize == 1 && psize == 1 && this.current.firstKey() == this.previous.firstKey()) {
|
||||||
// We need to ensure that the keys are the same
|
// We need to ensure that the keys are the same, since single points with different keys
|
||||||
|
// can jump
|
||||||
let current = this.current.first();
|
let current = this.current.first();
|
||||||
let previous = this.previous.first();
|
let previous = this.previous.first();
|
||||||
let delta = Points.subtract(current, previous);
|
let delta = Points.subtract(current, previous);
|
||||||
return new InteractionDelta(delta.x, delta.y, 1.0, 0.0, current)
|
return new InteractionDelta(delta.x, delta.y, 1.0, 0.0, current, csize)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -6104,7 +6113,9 @@
|
|||||||
this.lastframe = t;
|
this.lastframe = t;
|
||||||
if (dt > 0) {
|
if (dt > 0) {
|
||||||
// Avoid division by zero errors later on
|
// Avoid division by zero errors later on
|
||||||
let velocity = { t: t, dt: dt, dx: delta.x, dy: delta.y };
|
// and consider the number of involved pointers sind addVelocity will be called by the
|
||||||
|
// onMove events
|
||||||
|
let velocity = { t: t, dt: dt, dx: delta.x / delta.number, dy: delta.y / delta.number};
|
||||||
this.velocities.push(velocity);
|
this.velocities.push(velocity);
|
||||||
while (this.velocities.length > buffer) {
|
while (this.velocities.length > buffer) {
|
||||||
this.velocities.shift();
|
this.velocities.shift();
|
||||||
@ -6113,7 +6124,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
meanVelocity(milliseconds = 30) {
|
meanVelocity(milliseconds = 30) {
|
||||||
this.addVelocity({ x: 0, y: 0 });
|
this.addVelocity({ x: 0, y: 0, number: 1 });
|
||||||
let sum = { x: 0, y: 0 };
|
let sum = { x: 0, y: 0 };
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let t = 0;
|
let t = 0;
|
||||||
|
@ -138,7 +138,7 @@ class Throwable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
meanVelocity(milliseconds = 30) {
|
meanVelocity(milliseconds = 30) {
|
||||||
this.addVelocity({ x: 0, y: 0 })
|
this.addVelocity({ x: 0, y: 0, number: 1 })
|
||||||
let sum = { x: 0, y: 0 }
|
let sum = { x: 0, y: 0 }
|
||||||
let count = 0
|
let count = 0
|
||||||
let t = 0
|
let t = 0
|
||||||
|
Loading…
Reference in New Issue
Block a user