如何获得任何曲线的点(上)
How to get point (on) of any curved line
我想要像下图这样的东西
我通过 canvas.but 创建了一条曲线,现在我不知道如何获得圆的坐标。如果它可以通过 arc 完成然后解释 how.how 我做了很多
我试过的如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
PointF curvePoint = new PointF(580, 120); //curve point
PointF mPoint2 = new PointF(60, 700); //Last point
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4);
paint.setColor(Color.GRAY);
Path myPath1 = drawCurve(curvePoint, mPoint2);
canvas.drawPath(myPath1, paint);
}
private Path drawCurve(PointF mPointa, PointF mPointb) {
Path myPath = new Path();
myPath.moveTo(600, 60); // starting point
myPath.quadTo(mPointa.x, mPointa.y, mPointb.x, mPointb.y);
return myPath;
}
请帮忙!
获取二次贝塞尔曲线上的一个点。
private PointF getPointOnQuad(PointF p1, PointF p2, PointF p3, float p){
float x1 = (p2.x - p1.x) * p + p1.x;
float y1 = (p2.y - p1.y) * p + p1.y;
float x2 = (p3.x - p2.x) * p + p2.x;
float y2 = (p3.y - p2.y) * p + p2.y;
PointF point = new PointF((x2 - x1) * p + x1, (y2 - y1) * p + y1);
return point;
}
Returns p = 0 to 1
沿曲线 p1
、p2
、p3
的点。其中 p = 0
是曲线的起点,p = 0.5
是中途,p = 1
是终点。点p1
是起点,p2
是控制点,p3
是终点。
为了让你的曲线得到中点,
PointF pointOnCurve = getPointOnQuad(new PointF(600,60), mPointa, mPointb, 0.5);
我想要像下图这样的东西
我通过 canvas.but 创建了一条曲线,现在我不知道如何获得圆的坐标。如果它可以通过 arc 完成然后解释 how.how 我做了很多
我试过的如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
PointF curvePoint = new PointF(580, 120); //curve point
PointF mPoint2 = new PointF(60, 700); //Last point
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4);
paint.setColor(Color.GRAY);
Path myPath1 = drawCurve(curvePoint, mPoint2);
canvas.drawPath(myPath1, paint);
}
private Path drawCurve(PointF mPointa, PointF mPointb) {
Path myPath = new Path();
myPath.moveTo(600, 60); // starting point
myPath.quadTo(mPointa.x, mPointa.y, mPointb.x, mPointb.y);
return myPath;
}
请帮忙!
获取二次贝塞尔曲线上的一个点。
private PointF getPointOnQuad(PointF p1, PointF p2, PointF p3, float p){
float x1 = (p2.x - p1.x) * p + p1.x;
float y1 = (p2.y - p1.y) * p + p1.y;
float x2 = (p3.x - p2.x) * p + p2.x;
float y2 = (p3.y - p2.y) * p + p2.y;
PointF point = new PointF((x2 - x1) * p + x1, (y2 - y1) * p + y1);
return point;
}
Returns p = 0 to 1
沿曲线 p1
、p2
、p3
的点。其中 p = 0
是曲线的起点,p = 0.5
是中途,p = 1
是终点。点p1
是起点,p2
是控制点,p3
是终点。
为了让你的曲线得到中点,
PointF pointOnCurve = getPointOnQuad(new PointF(600,60), mPointa, mPointb, 0.5);