Как найти отстой по двум точкам с помощью растрового изображения?

Я пытаюсь найти наклон линий, которые я рисую на изображении.

(но это событие касания, я хочу рассчитать наклон, когда камера перемещает свой код для робота. камера находится на голове робота, и она будет двигаться в коридоре, если наклон обеих линий на данном изображении такой же, что означает, что робот находится в центре i хотите получить ответ в этом случае, используя плитки красного цвета. и расчет не будет выполняться при касании, а путем изменения положения изображения во время выполнения) Я использую растровое изображение, чтобы найти цвет каждого пикселя. Моя цель в качестве начала плитки красного цвета, обратите внимание на точку (a), а затем аналогичным образом найдите точку (b), чтобы вычислить наклон линии. То же самое для строки на другой стороне. Это мой код, который я сделал до сих пор. Прошу прощения, если я задаю вопрос неправильно. Заранее спасибо

 public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction()== event.ACTION_DOWN||event.getAction()== event.ACTION_MOVE)
            {
                bmp=image.getDrawingCache();
                int wi=bmp.getWidth();
                int hi=bmp.getHeight();
                int x= (int) event.getX();
                int y= (int) event.getY();
                int pixel=bmp.getPixel((int)event.getX(),(int)event.getY());
                int a=bmp.getPixel((int)event.getX()-1,(int)event.getY()+1);
                int b=bmp.getPixel((int)event.getX(),(int)event.getY()+1);
                int c=bmp.getPixel((int)event.getX()+1,(int)event.getY()+1);
                int d=bmp.getPixel((int)event.getX()-1,(int)event.getY());
                int e=bmp.getPixel((int)event.getX()+1,(int)event.getY());
                int f=bmp.getPixel((int)event.getX()-1,(int)event.getY()-1);
                int g=bmp.getPixel((int)event.getX(),(int)event.getY()-1);
                int h=bmp.getPixel((int)event.getX()+1,(int)event.getY()-1);
                //Pixel
                int Red= Color.red(pixel);
                int Green=Color.green(pixel);
                int Blue= Color.blue(pixel);
                int avg=Green+Blue/3;

                int Ra= Color.red(a);
                int Ga=Color.green(a);
                int Ba= Color.blue(a);
                int avgA=Ga+Ba/3;
                //b
                int Rb= Color.red(b);
                int Gb=Color.green(b);
                int Bb= Color.blue(b);
                int avgB=+Gb+Bb/3;
                //c
                int Rc= Color.red(c);
                int Gc=Color.green(c);
                int Bc= Color.blue(c);
                int avgC=Gc+Bc/3;
                //d
                int Rd= Color.red(d);
                int Gd=Color.green(d);
                int Bd= Color.blue(d);
                int avgD=Gd+Bd/3;
                //e
                int Re= Color.red(e);
                int Ge=Color.green(e);
                int Be= Color.blue(e);
                int avgE=Ge+Be/3;
                //f
                int Rf= Color.red(f);
                int Gf=Color.green(f);
                int Bf= Color.blue(f);
                int avgF=Gf+Bf/3;
                //g
                int Rg= Color.red(g);
                int Gg=Color.green(g);
                int Bg= Color.blue(g);
                int avgG=Gg+Bg/3;
                //h
                int Rh= Color.red(h);
                int Gh=Color.green(h);
                int Bh= Color.blue(h);
                int avgH=Gh+Bh/3;
                int OverAllAvgGB=avgA+avgB+avgC+avgD+avg+avgE+avgF+avgG+avgH/9;
                int OverAllAvgR=Red+Ra+Rb+Rc+Rd+Re+Rf+Rg+Rh;

                textView.setBackgroundColor(Color.rgb(Red,Green,Blue));

                textView.setText("Red("+Red+")\n"+"Green("+Green+")\n"+"Blue("+Blue+")\n\n"+"X("+x+")\n"+"Y("+y+")"+"\n\n"+
                        "        \n"+"Width("+wi+")"+"   "+"Height("+hi+")\n"+
                        "Color Matrix\n"+
                        avgA+"  "+avgB+"  "+avgC+"\n"+
                        avgD+"  "+avg+"  "+avgE+"\n"+
                        avgF+"  "+avgG+"  "+avgH+"\n"+
                        " NEIGHBOURS GB = "+OverAllAvgGB+"\n"+
                        "OVERALL Red = "+OverAllAvgR+"\n"

                );

            }

            return true;
        }

    });
}

да, я отредактировал свой вопрос извините

MISBAHKHAN 21.04.2018 15:49
0
1
33
1

Ответы 1

Чтобы найти наклон любой прямой, вам потребуется указатель касания экрана и выхода с экрана. при прикосновении к экрану генерируется событие ACTION_DOWN, а когда экран остается, выбрасывается ACTION_UP. Здесь (x1,y1) сохраняется при прикосновении к экрану, а (x2,y2) рассчитывается, когда вы покидаете экран. Теперь вы можете найти уклон с помощью этих двух индексов по уравнению уклона:

m (slop of any straight line) = (y2-y1)/(x2-x1)

Вот исходный код, надеюсь, вы найдете его полезным.

int x1,x2,y1,y2; 
public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction()== event.ACTION_DOWN){
                x1 = (int) event.getX();
                y1 = (int) event.getY();
        }
        if (event.getAction()== event.ACTION_UP){
                x2 = (int) event.getX();
                y2 = (int) event.getY();
                double slop = (y2-y1)/(x2-x1);
        }
}

не могли бы вы объяснить свой ответ?

MISBAHKHAN 21.04.2018 14:55

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

MISBAHKHAN 21.04.2018 15:39

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