-1

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

在此处输入图像描述

我试图在两点之间画一条线。我有一点 (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);     

结束效果:

在此处输入图像描述

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

有谁知道发生了什么?如果没有,也许有人可以告诉我不使用数学方程式绘制穿过黄点的垂直线的方法吗?

4

3 回答 3

1

看来您的 y1 和 y2 坐标可能有问题。根据先前的经验和理论,如果您将它们转换为 int,您的 y 坐标将与标记白线的坐标不同。尝试更早地进行转换,例如在定义变量 A 时。

于 2014-05-30T14:00:54.293 回答
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);
            }

        }
        }
    }

影响:

在此处输入图像描述

于 2014-05-30T14:08:01.507 回答
0

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

于 2019-06-17T14:14:46.897 回答