使用等式绘制线

时间:2014-05-30 13:35:26

标签: java image image-processing marvin-framework

我的程序的目标是绘制垂直于白线的线条,穿过黄点。我唯一的想法是找到方程式,但我做的第一件事就是使用等式绘制白线,但它不起作用,我想知道为什么。

enter image description here

我想在两点之间划一条线。 我有一个点(beginX,beginY)和(endX,endY)

以下是等式的外观:

equation

我正在使用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);     

结束效果:

enter image description here

我不知道为什么我的线与白线不一样。我知道它开始和结束的不同点,但为什么它甚至没有白色的pararrel?

有谁知道发生了什么事? 如果没有,也许任何人都可以告诉我如何通过黄色点绘制垂直线而不是使用数学方程?

3 个答案:

答案 0 :(得分:1)

您的y1和y2坐标似乎有问题。从以前的经验和理论上来说,如果将它们转换为int,则y坐标将与标记白线的坐标不同。尝试更早地进行投射,比如在定义变量A时。

答案 1 :(得分:0)

哦,我找到了一个很好的,简单的解决方案来绘制垂直线。

我发现两条点位于白线上,它们与黄点的距离相同。现在,当我为与这两个点中的每个点相同距离的像素着色时,我得到垂直线。

代码:

     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);
            }

        }
        }
    }

效果:

enter image description here

答案 2 :(得分:0)

垂直于y = mx + b的线的斜率为m' = -1/m。现在您有了一个斜率m'和点P = (x, y)(选择一条线将相交的点,或者只是选择b'),因此可以找到y = m'(x) + b'。这确实是一个简单的问题,不需要$ O(n ^ 3)$解决方案。