Рисование линии с использованием уравнения
Цель моей программы - нарисовать линии, перпендикулярные белой линии, проходящие через желтые точки. Моя единственная идея состояла в том, чтобы найти уравнение, но первое, что я сделал, это нарисовал белую линию, используя уравнение, но оно не работает, и мне интересно, почему.
Я пытаюсь нарисовать линию между двумя точками. У меня есть точка (beginX, beginY) и (endX, endY)
Вот как выглядит уравнение:
Я использую библиотеку обработки изображений Marvin и есть функция
imageIn.drawLine(int x1, int y1,int x2,int y2,Color c);
которая рисует линию между двумя точками (x1,y1) и (x2,y2)
Я использовал эту функцию, чтобы нарисовать линию между моими точками, и она работает хорошо. Но теперь я хочу нарисовать ту же линию, но используя мое уравнение. (Мне это нужно, потому что следующий шаг моей программы - нарисовать перпендикулярные линии, проходящие через желтые точки, и я понятия не имею, как это сделать по-другому).
Вот мой код:
int A = (endY-beginY)/(endX-beginX);
int x1 = 120;
int x2 = 60;
int y1 = (int)(A*x1+beginY-A*beginX); // equation
int y2 = (int)(A*x2+beginY-A*beginX);
imageIn.drawLine(x1, y1, x2, y2, Color.green);
imageIn.drawLine(beginX, beginY, endX, endY, Color.white);
Закончить эффект:
Понятия не имею, почему моя линия не такая, как белая. Я знаю, что он начинается и заканчивается в разных точках, но почему он даже не уступает белому?
Кто-нибудь знает что происходит? А если нет, то может кто-нибудь сказать мне, как нарисовать перпендикулярные линии, проходящие через желтые точки, не используя математическое уравнение?
2 ответа
Кажется, у вас могут быть проблемы с вашими координатами y1 и y2. Из предыдущего опыта и теории, если вы приведете их к int, ваши y-координаты не будут такими же, как те, которые отмечают белую линию. Попробуйте приведение ранее, скажем, когда вы определяете переменную А.
The line perpendicular to y = mx + b
has a slope of m' = -1/m
. Now you have a slope m'
and the point P = (x, y)
(pick the point one line would intersects, or just pick b'
) and thus you can find y = m'(x) + b'
. This is really a simple problem it doesn't need $O(n^3)$ solution.
О, я нашел хорошее, простое решение для рисования перпендикуляра.
Я нахожу две точки, лежащие на белой линии, которые расположены на одинаковом расстоянии от желтой точки. Теперь, когда я закрашиваю пиксели, которые находятся на одинаковом расстоянии от каждой из этих двух точек, я получаю перпендикулярную линию.
Код:
for ( int i = 0 ; i < 5; i++){
for (int x = 0; x < imageIn.getWidth(); x++) {
for (int y = 0; y < imageIn.getHeight(); y++) {
Point xy = new Point(x,y);
Point temp = new Point(a[i],b[i]); // a[i] b[i] - coordinates of the first point
Point temp1 = new Point(a[i+2],b[i+2]); // a[i+2] b[i+2] - coordinates of second point
if(CountDistance(imageIn, xy, temp)==CountDistance(imageIn, xy, temp1))
{
imageIn.setIntColor(x, y, 0,0,255);
}
}
}
}
Эффект: