GeomVis  0.1
Набор классов Java для визуализации результатов работы геометрических алгоритмов
Line.java
См. документацию.
1 package geom;
2 
3 import java.awt.Color;
4 
9 public class Line extends GObject
10 {
11 
12  public double a, b, c;
13 
14  public Line(double a, double b, double c) {
15  this.a = a;
16  this.b = b;
17  this.c = c;
18  }
19 
20  public Line(Point p1, Point p2) {
21  a = p1.y - p2.y;
22  b = p2.x - p1.x;
23  c = -(a * p1.x + b * p1.y);
24  double k = 1 / Math.sqrt(a * a + b * b);
25  a /= k;
26  b /= k;
27  c /= k;
28  }
29 
30  public double y(double x)
31  {
32  return (( -c - a * x) / b);
33  }
34 
35  public double distance(Point p)
36  {
37  return distance(p.x, p.y);
38  }
39 
40  public double distance(double x, double y)
41  {
42  return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b);
43  }
44 
45  @Override
46  public void draw(GCoordSystem gcs)
47  {
48  double x1, y1, x2, y2;
49  if ( !Accur.eq(b, 0))
50  {
51  x1 = gcs.realX(0);
52  y1 = y(x1);
53  x2 = gcs.realX(gcs.getWidth());
54  y2 = y(x2);
55  } else
56  {
57  x1 = -c / a;
58  y1 = gcs.realY(0);
59  x2 = x1;
60  y2 = gcs.realY(gcs.getHeight());
61  }
62  Color prevcolor = gcs.getCanvas().getColor();
63  view().chooseColor(Color.BLACK, Color.YELLOW, Color.GREEN, gcs);
64  gcs.getCanvas().drawLine(gcs.canvasX(x1), gcs.canvasY(y1),
65  gcs.canvasX(x2), gcs.canvasY(y2));
66  gcs.getCanvas().setColor(prevcolor);
67  }
68 
69  @Override
70  public boolean in(int canvasX, int canvasY, GCoordSystem gcs)
71  {
72  if (distance(gcs.realX(canvasX), gcs.realY(canvasY)) / gcs.getScale() < gcs.gEps)
73  return true;
74  else
75  return false;
76  }
77 
78 }
Класс для работы с вещественными числами
Definition: Accur.java:6
double x
Definition: Point.java:13
double a
Definition: Line.java:12
Line(Point p1, Point p2)
Definition: Line.java:20
double c
Definition: Line.java:12
double b
Definition: Line.java:12
double distance(double x, double y)
Definition: Line.java:40
double realX(int canvasX)
Точка. Определяется двумя числами - координами в декартовой системе координат.
Definition: Point.java:10
static boolean eq(double a, double b)
Проверка вещественных чисел на равенство
Definition: Accur.java:14
double distance(Point p)
Definition: Line.java:35
void draw(GCoordSystem gcs)
Definition: Line.java:46
Главный класс отображения. У пользователя нет необходимости его использовать напрямую.
int canvasX(double realX)
Абстрактный суперкласс для всех графических объектов
Definition: GObject.java:14
Прямая. Определяется двумя точками
Definition: Line.java:9
GView view()
Definition: GObject.java:19
double y(double x)
Definition: Line.java:30
Line(double a, double b, double c)
Definition: Line.java:14
boolean in(int canvasX, int canvasY, GCoordSystem gcs)
Definition: Line.java:70
double y
Definition: Point.java:14