4ced26bf642bf871cd4bdff18c9aabb4409af8dd
[sixth-3d.git] /
1 /*
2  * Sixth 3D engine. Copyright ©2012-2016, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of version 3 of the GNU Lesser General Public License
6  * or later as published by the Free Software Foundation.
7  *
8  */
9
10 package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.solidpolygon;
11
12 import eu.svjatoslav.sixth.e3d.geometry.Point2D;
13
14 public class LineInterpolator implements Comparable<LineInterpolator> {
15
16     Point2D p1;
17     Point2D p2;
18     private int height;
19     private int width;
20     private int absoluteHeight;
21
22     @Override
23     public boolean equals(final Object o) {
24         if (o == null) return false;
25
26         return o instanceof LineInterpolator && compareTo((LineInterpolator) o) == 0;
27     }
28
29     @Override
30     public int compareTo(final LineInterpolator o) {
31         if (absoluteHeight < o.absoluteHeight)
32             return 1;
33         if (absoluteHeight > o.absoluteHeight)
34             return -1;
35
36         if (width < o.width)
37             return 1;
38         if (width > o.width)
39             return -1;
40
41         return 0;
42     }
43
44     @Override
45     public int hashCode() {
46         int result = width;
47         result = 31 * result + absoluteHeight;
48         return result;
49     }
50
51     public boolean containsY(final int y) {
52
53         if (p1.y <= p2.y) {
54             if (y >= p1.y)
55                 if (y <= p2.y)
56                     return true;
57         } else if (y >= p2.y)
58             if (y <= p1.y)
59                 return true;
60
61         return false;
62     }
63
64     public int getX(final int y) {
65
66         if (height == 0)
67             return (int) (p2.x + p1.x) / 2;
68
69         return (int) (p1.x + ((width * (y - p1.y)) / height));
70     }
71
72     public void setPoints(final Point2D p1, final Point2D p2) {
73         this.p1 = p1;
74         this.p2 = p2;
75         height = (int) (p2.y - p1.y);
76         width = (int) (p2.x - p1.x);
77
78         absoluteHeight = Math.abs(height);
79     }
80
81 }