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