2016-01-12 2 views
-2

Я хочу что-то вроде этого, как в изображении нижеКак получить точку (на) любой изогнутой линии

enter image description here

Я создал изогнутую линию через canvas.but теперь я не получаю, как получите сотрудничества -ограничения для круга. и если это может быть сделано по дуге, то объяснить how.how много я сделал

enter image description here

То, что я пытался ниже:

@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; 
} 

Пожалуйста, помогите!

+0

Вы кривая, как представляется, отрезок окружности (дуги). Если вы знаете центр и длину радиуса (и угол), то это просто применение тригонометрии. –

+0

by trignomentry Как я могу найти точку на дуге? @ HrundiV.Bakshi – curiousMind

+0

читать документацию 'android.graphics.PathMeasure' – pskink

ответ

3

Чтобы получить точку на квадратичной кривой Безье.

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; 
} 

Возвращает точку, 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); 
+0

Большое спасибо. Он работает как шарм :) – curiousMind

Смежные вопросы