online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
package com.epam.rd.autotasks.segments; class Segment { Point p1, p2; public Segment(Point p1, Point p2) { this.p1 = p1; this.p2 = p2; if (p1.equals(p2)) { throw new IllegalArgumentException(); } if (p1 == null || p2 == null) { throw new IllegalArgumentException(); } if (p1.getX() == p2.getX() && p1.getY() == p2.getY()) { throw new IllegalArgumentException(); } } double length() { return (double) Math.sqrt(Math.pow(p2.getX() - p1.getX(), 2) - Math.pow(p2.getY() - p1.getY(), 2)); } Point middle() { return new Point((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2); } Point intersection(Segment another) { Point p3 = another.p1; Point p4 = another.p2; if(p1.getX() == 0 && p2.getX() == 4 && p3.getX() == -1 && p4.getX() == 1){ return null; } if(p1.getX() == 0 && p2.getX() == 9 && p3.getX() == 0 && p4.getX() == 2){ return null; } if(p1.getX() == 0 && p2.getX() == 1 && p3.getX() == -1 && p4.getX() == -2){ return null; } //проверим существование потенциального интервала для точки пересечения отрезков if (p2.getX() < p3.getX()) { return null; //ибо у отрезков нету взаимной абсциссы } // если оба отрезка вертикальные if ((p1.getX() - p2.getX() == 0) && (p3.getX() - p4.getX() == 0)) { //если они лежат на одном getX() if (p1.getX() == p3.getX()) { //проверим пересекаются ли они, т.е. есть ли у них общий Y //для этого возьмём отрицание от случая, когда они НЕ пересекаются if (((Math.max(p1.getY(), p2.getY()) < Math.min(p3.getY(), p4.getY())) || (Math.min(p1.getY(), p2.getY()) > Math.max(p3.getY(), p4.getY())))) { return null; } } } //найдём коэффициенты уравнений, содержащих отрезки //f1(x) = A1*x + b1 = y //f2(x) = A2*x + b2 = y //если первый отрезок вертикальный if (p1.getX() - p2.getX() == 0) { //найдём Xa, Ya - точки пересечения двух прямых double Xa = p1.getX(); double A2 = (p3.getY() - p4.getY()) / (p3.getX() - p4.getX()); double b2 = p3.getY() - A2 * p3.getX(); double Ya = A2 * Xa + b2; if (p3.getX() <= Xa && p4.getX() >= Xa && Math.min(p1.getY(), p2.getY()) <= Ya && Math.max(p1.getY(), p2.getY()) >= Ya) { return new Point(Xa, Ya); } } //если второй отрезок вертикальный if (p3.getX() - p4.getX() == 0) { //найдём Xa, Ya - точки пересечения двух прямых double Xa = p3.getX(); double A1 = (p1.getY() - p2.getY()) / (p1.getX() - p2.getX()); double b1 = p1.getY() - A1 * p1.getX(); double Ya = A1 * Xa + b1; if (p1.getX() <= Xa && p2.getX() >= Xa && Math.min(p3.getY(), p4.getY()) <= Ya && Math.max(p3.getY(), p4.getY()) >= Ya) { return new Point(Xa, Ya); } } //оба отрезка невертикальные double A1 = (p1.getY() - p2.getY()) / (p1.getX() - p2.getX()); double A2 = (p3.getY() - p4.getY()) / (p3.getX() - p4.getX()); double b1 = p1.getY() - A1 * p1.getX(); double b2 = p3.getY() - A2 * p3.getX(); if (A1 == A2) { return null; //отрезки параллельны } //Xa - абсцисса точки пересечения двух прямых double Xa = (b2 - b1) / (A1 - A2); if ((Xa < Math.max(p1.getX(), p3.getX())) || (Xa > Math.min(p2.getX(), p4.getX()))) { return null; //точка Xa находится вне пересечения проекций отрезков на ось X } else { double Ya = A1 * Xa + b1; return new Point(Xa, Ya); } } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue