package org.opencv.core; /** * <p>Template class for 2D points specified by its coordinates <em>x</em> and * <em>y</em>. * An instance of the class is interchangeable with C structures, * <code>CvPoint</code> and <code>CvPoint2D32f</code>. There is also a cast * operator to convert point coordinates to the specified type. The conversion * from floating-point coordinates to integer coordinates is done by rounding. * Commonly, the conversion uses this operation for each of the coordinates. * Besides the class members listed in the declaration above, the following * operations on points are implemented:</p> * * <p>pt1 = pt2 + pt3; <code></p> * * <p>// C++ code:</p> * * <p>pt1 = pt2 - pt3;</p> * * <p>pt1 = pt2 * a;</p> * * <p>pt1 = a * pt2;</p> * * <p>pt1 += pt2;</p> * * <p>pt1 -= pt2;</p> * * <p>pt1 *= a;</p> * * <p>double value = norm(pt); // L2 norm</p> * * <p>pt1 == pt2;</p> * * <p>pt1 != pt2;</p> * * <p>For your convenience, the following type aliases are defined:</p> * * <p>typedef Point_<int> Point2i;</p> * * <p>typedef Point2i Point;</p> * * <p>typedef Point_<float> Point2f;</p> * * <p>typedef Point_<double> Point2d;</p> * * <p>Example:</p> * * <p>Point2f a(0.3f, 0.f), b(0.f, 0.4f);</p> * * <p>Point pt = (a + b)*10.f;</p> * * <p>cout << pt.x << ", " << pt.y << endl;</p> * * @see <a href="http://docs.opencv.org/modules/core/doc/basic_structures.html#point">org.opencv.core.Point_</a> */ public class Point { public double x, y; public Point(double x, double y) { this.x = x; this.y = y; } public Point() { this(0, 0); } public Point(double[] vals) { this(); set(vals); } public void set(double[] vals) { if (vals != null) { x = vals.length > 0 ? vals[0] : 0; y = vals.length > 1 ? vals[1] : 0; } else { x = 0; y = 0; } } public Point clone() { return new Point(x, y); } public double dot(Point p) { return x * p.x + y * p.y; } @Override public int hashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(x); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(y); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof Point)) return false; Point it = (Point) obj; return x == it.x && y == it.y; } public boolean inside(Rect r) { return r.contains(this); } @Override public String toString() { return "{" + x + ", " + y + "}"; } }