最近想画两球水滴效果所有在网上找两圆外切点和内切点的算法,找了很久没有找到所以自己写了一个工具类来计算两圆的公切线点。具体效果如下图:
根据CircleUtils类的getCircleTangentPointOut方法返回外切点坐标[r1p1, r1p2, r2p1, r2p2],依次为左边圆的两个切点坐标和右边两个切点坐标。
根据CircleUtils类的getCircleTangentPointIn方法返回外切点坐标[r1p1, r1p2, r2p1, r2p2],依次为左边圆的两个切点坐标和右边两个切点坐标。
根据获取坐标绘制线段和点,如下代码
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(0XFF00FF00);
mPaint.setStyle(Paint.Style.FILL);
float r1 = 300;
float r2 = 200;
canvas.drawCircle(mDownX, mDownY, r1, mPaint);
canvas.drawCircle(mCurrentX, mCurrentY, r2, mPaint);
PointF[] points2 = CircleUtils.getCircleTangentPointOut(new PointF(mDownX, mDownY), r1, new PointF(mCurrentX, mCurrentY), r2);
if (points2 != null) {
mPaint.setColor(0XFF0000FF);
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawLine(points2[0].x, points2[0].y, points2[2].x, points2[2].y, mPaint);
canvas.drawLine(points2[1].x, points2[1].y, points2[3].x, points2[3].y, mPaint);
}
PointF[] points1 = CircleUtils.getCircleTangentPointIn(new PointF(mDownX, mDownY), r1, new PointF(mCurrentX, mCu