Point3d.java 3.03 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*-
 *  Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
 * 
 *  This file is part of CityDoctor2.
 *
 *  CityDoctor2 is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  CityDoctor2 is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with CityDoctor2.  If not, see <https://www.gnu.org/licenses/>.
 */
package de.hft.stuttgart.citydoctor2.edge;


public class Point3d {

	private double x;
	private double y;
	private double z;

	public Point3d(double x, double y, double z) {
		this.x = x;
		this.y = y;
		this.z = z;
	}

	public Point3d(double[] values) {
		this(values[0], values[1], values[2]);
	}

	public Point3d(Point3d p) {
		this(p.getX(), p.getY(), p.getZ());
	}

	public boolean isAlmostEqual(Point3d origin, double eps) {
		Vector3d vec = minus(origin);
		double localEps = eps * eps;
		if (localEps < Global.getHighAccuracyTolerance()) {
			localEps = Global.getHighAccuracyTolerance();
		}
		
		return vec.getLength2() < localEps;
	}

	public Vector3d minus(Point3d org) {
		return new Vector3d(x - org.getX(), y - org.getY(), z - org.getZ());
	}

	public Point3d plus(Vector3d v) {
		return new Point3d(x + v.getX(), y + v.getY(), z + v.getZ());
	}

	public double getX() {
		return x;
	}

	public double getY() {
		return y;
	}

	public double getZ() {
		return z;
	}

	public Point3d plus(Point3d point) {
		return new Point3d(x + point.getX(), y + point.getY(), z + point.getZ());
	}

	public Point3d div(double d) {
		return new Point3d(x / d, y /d, z / d);
	}

	@Override
	public String toString() {
		return "Point3d [x=" + x + ", y=" + y + ", z=" + z + "]";
	}

Matthias Betz's avatar
Matthias Betz committed
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
	@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));
		temp = Double.doubleToLongBits(z);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Point3d other = (Point3d) obj;
		if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
			return false;
		if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
			return false;
		if (Double.doubleToLongBits(z) != Double.doubleToLongBits(other.z))
			return false;
		return true;
	}

116
}