Я пытаюсь найти наклон линий, которые я рисую на изображении.
(но это событие касания, я хочу рассчитать наклон, когда камера перемещает свой код для робота. камера находится на голове робота, и она будет двигаться в коридоре, если наклон обеих линий на данном изображении такой же, что означает, что робот находится в центре 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;
}
});
}
Чтобы найти наклон любой прямой, вам потребуется указатель касания экрана и выхода с экрана. при прикосновении к экрану генерируется событие 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);
}
}
не могли бы вы объяснить свой ответ?
да, я понимаю твой ответ. Спасибо . но это событие касания, я хочу рассчитать наклон, поскольку камера перемещает свой код для робота. камера находится на голове робота, и она будет двигаться в коридоре, если наклон обеих линий на данном изображении такой же, что означает, что робот находится в центре, я хочу ответьте в этом случае, используя плитки красного цвета. и расчет не будет производиться при касании, а путем изменения положения изображения во время выполнения ... извините, если не объяснил хорошо, можете ли вы мне помочь в этом случае
да, я отредактировал свой вопрос извините