私はJava/Androidで幸運の車輪を開発したいと思います。ユーザーが画面に触れると、私はmouvementを検出し、それぞれの変更について、私は古い圧力と最新の(関数onScroll)の間の角度を計算します。3点間の角度が署名されている、悪い結果
public class Test {
public static void main(String[] args) {
Test test = new Test();
Point center = new Point(2.26f, 2.26f);
Point current = new Point(2.54f, 3.64f);
Point previous = new Point(2.25f, 3.73f);
System.out.println("1) Angle is "
+ test.function1(center, current, previous));
System.out.println("2) Angle is "
+ test.function2(center, current, previous));
System.out.println("3) Angle is "
+ test.function3(center, current, previous));
System.out.println("################################");
center = new Point(2.26f, 2.26f);
previous = new Point(3.29f, 1.04f);
current = new Point(0.98f, 2.25f);
System.out.println("1) Angle is "
+ test.function1(center, current, previous));
System.out.println("2) Angle is "
+ test.function2(center, current, previous));
System.out.println("3) Angle is "
+ test.function3(center, current, previous));
System.out.println("################################");
center = new Point(226.0f, 226.0f);
previous = new Point(225.21994f, 373.3158f);
current = new Point(254.31085f, 364.05264f);
System.out.println("1) Angle is "
+ test.function1(center, current, previous));
System.out.println("2) Angle is "
+ test.function2(center, current, previous));
System.out.println("3) Angle is "
+ test.function3(center, current, previous));
System.out.println("################################");
}
public double function1(Point center, Point current, Point previous) {
double ang1 = Math.atan((previous.getdY() - center.getdY())
/(previous.getdX() - center.getdX()));
double ang2 = Math.atan((current.getdY() - center.getdY())
/(current.getdX() - center.getdX()));
double rslt = ang1 - ang2;
return Math.toDegrees(rslt) * -1;
}
private double function2(Point center, Point current, Point previous) {
float dx = current.getdX() - center.getdX();
float dy = current.getdY() - center.getdY();
double a = Math.atan2(dy, dx);
float dpx = previous.getdX() - center.getdX();
float dpy = previous.getdY() - center.getdY();
double b = Math.atan2(dpy, dpx);
double diff = a - b;
double degres = Math.toDegrees(diff);
return degres;
}
public double function3(Point center, Point current, Point previous) {
Point p1 = new Point(current.getdX() - center.getdX(), current.getdY()
- center.getdY());
Point p2 = new Point(previous.getdX() - center.getdX(),
previous.getdY() - previous.getdY());
double angle = Math.atan2(p1.getdY() - p2.getdY(),
p1.getdX() - p2.getdX());
return Math.toDegrees(angle);
}
}
:私は3点間の角度を計算することができますどのように覚えていないので、私は、私は3つの機能を開発するが、それぞれが私に様々な結果を与える...問題をしました
ネット上でこの機能が見つかりましたが、どちらが最適かわかりません。
あなたは私を助けることができますか?
に最高の答えを機能2に類似しているだろう実際の例を取って単体テストを構築することです。賢明で、よく試し、正しいものを選んでください。 – Snicolas
これを見てください:http://stackoverflow.com/questions/1211212/how-to-calculate-an-angle-from-three-points – AlexR
どのような結果が得られますか? –