e8364dc11f10a71ca27110ed9a162308e18f8030
[sixth-3d.git] /
1 /*
2  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
3  * This project is released under Creative Commons Zero (CC0) license.
4  *
5 *
6  */
7
8 package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.solidpolygon;
9
10 import eu.svjatoslav.sixth.e3d.geometry.Point2D;
11
12 public class LineInterpolator implements Comparable<LineInterpolator> {
13
14     Point2D p1;
15     Point2D p2;
16     private int height;
17     private int width;
18     private int absoluteHeight;
19
20     @Override
21     public boolean equals(final Object o) {
22         if (o == null) return false;
23
24         return o instanceof LineInterpolator && compareTo((LineInterpolator) o) == 0;
25     }
26
27     @Override
28     public int compareTo(final LineInterpolator o) {
29         if (absoluteHeight < o.absoluteHeight)
30             return 1;
31         if (absoluteHeight > o.absoluteHeight)
32             return -1;
33
34         return Integer.compare(o.width, width);
35
36     }
37
38     @Override
39     public int hashCode() {
40         int result = width;
41         result = 31 * result + absoluteHeight;
42         return result;
43     }
44
45     public boolean containsY(final int y) {
46
47         if (p1.y <= p2.y) {
48             if (y >= p1.y)
49                 if (y <= p2.y)
50                     return true;
51         } else if (y >= p2.y)
52             if (y <= p1.y)
53                 return true;
54
55         return false;
56     }
57
58     public int getX(final int y) {
59
60         if (height == 0)
61             return (int) (p2.x + p1.x) / 2;
62
63         return (int) (p1.x + ((width * (y - p1.y)) / height));
64     }
65
66     public void setPoints(final Point2D p1, final Point2D p2) {
67         this.p1 = p1;
68         this.p2 = p2;
69         height = (int) (p2.y - p1.y);
70         width = (int) (p2.x - p1.x);
71
72         absoluteHeight = Math.abs(height);
73     }
74
75 }