2014-04-22 9 views
0

Я работаю над проектами вычислительной геометрии, которые содержат классы для Point, Line, Triangle и т. Д. Я храню строки как yint и slope, однако это дает мне проблемы с вертикальными линиями, как показано ниже. Я должен поддерживать использование склонов в целом, однако я мог бы сделать преобразование в градусы, если вы считаете, что это подходит для ситуации.Проблемы с бесконечным двойным наклоном в Java

Ниже приведен метод получения массива всех высот треугольника, реализованных в классе треугольников. Это не работает. Я уверен, что это связано с бесконечными склонами, но не полностью. Есть идеи?

//sides is an array of LineSegs {AB, BC, CA} 
public Line[] getLineAltitudes() { 
    Line[] returner = new Line[3]; 

    for (int i=0; i<3; i++) { 
     //decides which point is opposite to lineseg 
     int pointgot = 0; 
     if (i == 0) pointgot = 2; 
     else if (i == 1) pointgot = 0; 
     else pointgot = 1; 

     //gets the perpendicular to a side   
     Double newSlope = (double)1/sides[i].getSlope(); 
     System.out.println(newSlope); 

     if (newSlope.isInfinite()) newSlope = (double) 0; 

     //constructs a line using the (working) constructor Line(point on line, slope) 
     returner[i] = new Line(getPoints()[pointgot],newSlope); 
    } 

    return returner; 
} 
+0

Я не совсем уверен, что «не работает» означает в вашем вопросе; но если бы мне пришлось моделировать строки в двумерном евклидовом пространстве, я бы использовал форму 'ax + by + c = 0' и имел класс, в котором хранятся' a', 'b' и' c'. Конечно, две строки считаются равными, если отношения от 'a' до' b' до 'c' одинаковы. –

+0

В этом случае не работает означает, что он возвращает нулевую строку, когда линия является вертикальной или горизонтальной. И нет, к сожалению, я не могу изменить, как работают линейные классы. – nanogru

+0

Кстати, если вы хотите найти наклон линии, перпендикулярной другой, вам нужно разделить «-1» наклон другой линии, а не «1». –

ответ

0

Чтобы справиться с вертикальными склонами, использование угловых измерений вместо наклона позволит вам сделать это без этой проблемы. Рассмотрите возможность использования java.lang.Math.atan2(double y, double x), чтобы получить вертикальный угол при нулевом изменении значения x.