我想检测点击三角形和矩形的形状。 这是一个点击Ellipse的检测代码。 我怎么能对三角形和矩形做同样的事情呢?
以下是Ellipse类中onClickEvent方法的代码: 我想要类似的东西,但是要三角形和矩形。
@Override
protected void onClickEvent(float x, float y) {
float a ;
float b ;
PointF f1, f2 ;
if(Math.abs(getHeight()*getScaleY()) >= Math.abs(getWidth()*getScaleX())){
a = getHeight()*getScaleY()/2 ;
b = getWidth()*getScaleX()/2 ;
// On calcul les points focaux (c = sqrt (a² - b²))
// Point focal F1(0;c) et F2(0;-c)
float c = (float) Math.sqrt(a*a - b*b);
f1 = new PointF(0, c);
f2 = new PointF(0, -c);
}
else{
b = getHeight()*getScaleY()/2 ;
a = getWidth()*getScaleX()/2 ;
// On calcul les points focaux (c = sqrt (a² - b²))
// Point focal F1(c;0) et F2(-c;0)
float c = (float) Math.sqrt(a*a - b*b);
f1 = new PointF(c, 0);
f2 = new PointF(-c, 0);
}
// On calcul x et y dans le repère de l'ellipse
// Translation pour se placer au centre de l'ellipse
x -= getCenterX() ;
y = getCenterY() - y;
// Rotation
double angleRadian = getAngle()/180*Math.PI ;
float newX = (float) (x * Math.cos(angleRadian) - y * Math.sin(angleRadian));
float newY = (float) (x * Math.sin(angleRadian) + y * Math.cos(angleRadian));
// On détermine si le clic fait parti de l'ellipse
// Distance entre le click et le point f1
float dist1 = (float) Math.sqrt(Math.pow((newX - f1.x), 2) + Math.pow((newY - f1.y), 2));
// Distance entre le click et le point f2
float dist2 = (float) Math.sqrt(Math.pow((newX - f2.x), 2) + Math.pow((newY - f2.y), 2));
// Somme des distances
float dist = dist1 + dist2 ;
if(style == Paint.Style.STROKE){
float stroke = (strokeWidth >= MIN_STROKE_DETECTION) ? strokeWidth : MIN_STROKE_DETECTION ;
if( dist <= (Math.abs(2*a) + stroke/2) && dist >= (Math.abs(2*a) - stroke/2))
setSelected(true);
else
setSelected(false);
}
else{
if(dist <= Math.abs(2*a))
setSelected(true);
else
setSelected(false);
}
}