нарисовать линию между двумя точками расстояния на Android - PullRequest
1 голос
/ 17 февраля 2012

Допустим, у нас есть холст 400x800, и я хочу нарисовать линию, соединяющую точки P1 (10,10) и P2 (500000,800000).Как вы можете видеть, вторая точка находится далеко за границами холста.Если я использую canvas.darwLine (p1.x, p1.y, p2.x, p2.y, paint), приложение зависает и приложение становится непригодным для использования.использование отсечения не решает проблему, механизм рисования по-прежнему пытается отрисовать пиксели по всей длине до второй точки

Любые предложения или обходной путь?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Если P2 находится за пределами видимой области (480x800 в данном конкретном случае), то рассчитайте пересечение этой линии с границей, а затем используйте точку пересечения вместо P2.

0 голосов
/ 17 февраля 2012

Вы можете уменьшить свою строку, примерно так:

int maxX = 400;
int maxY = 800;

//Calculate how much we have to scale down to fit in the bounds:
float scaleX = (maxX - p1.x)/p2.x;
float scaleY = (maxY - p1.y)/p2.y;

//Get the smallest scale, so that we fit in both axises.
float scale = Math.min(scaleX, scaleY);

//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds:
if(scale < 1.0f){
    p2.x *= scale;
    p2.y *= scale;
}

Я не пробовал этого, поэтому я не могу гарантировать, что это будет работать.

...