Рисование линии с использованием уравнения

Цель моей программы - нарисовать линии, перпендикулярные белой линии, проходящие через желтые точки. Моя единственная идея состояла в том, чтобы найти уравнение, но первое, что я сделал, это нарисовал белую линию, используя уравнение, но оно не работает, и мне интересно, почему.

Я пытаюсь нарисовать линию между двумя точками. У меня есть точка (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);
            }

        }
        }
    }

Эффект:

Другие вопросы по тегам