Как я могу сказать, принадлежит ли точка определенной строке?

Я не уверен, что служба будет работать, но приемник вещания определенно не будет. URL запускаются с помощью startActivity (). Приемники вещания не могут ответить на это.

http://developer.android.com/reference/android/content/BroadcastReceiver.html

FTA: обратите внимание, что хотя класс Intent используется для отправки и получения этих широковещательные рассылки, механизм рассылки намерений здесь полностью отделен от интентов, которые используются для запуска операций с Context.startActivity (). BroadcastReceiver не может увидеть или захватить Intents, используемый с startActivity (); аналогично, когда вы транслируете Намерение, вы никогда не найдете или не начнете Активность.

19
задан Michiel de Mare 25 May 2009 в 17:24
поделиться

9 ответов

В простейшей форме просто подставьте координаты в линейное уравнение и проверьте на равенство.

Дано:

Point p (X=4, Y=5)
Line l (Slope=1, YIntersect=1)

Подключите X и Y:

   Y = Slope * X + YIntersect
=> 5 = 1 * 4 + 1
=> 5 = 5

Так что да, точка находится на линии.

Если ваши линии представлены в форме (X1, Y1), (X2, Y2), то вы можете вычислить наклон с помощью:

 Slope = (y1 - y2) / (x1-x2)

А затем получить Y-пересечение с помощью этого:

 YIntersect = - Slope * X1 + Y1;

Изменить: я исправил Y-пересечение (которое было X1 / Y1 ...)

Вам нужно будет проверить, что x1 - x2 не равно 0 . Если это так, то проверка, находится ли точка на линии, - это простой вопрос проверки, равно ли значение Y в вашей точке либо x1 , либо x2 . Также убедитесь, что X точки не равно «x1» или «x2».

29
ответ дан 30 November 2019 в 01:48
поделиться

Лучший способ определить, лежит ли точка R = (rx, ry) на линии, соединяющей точки P = (px, py) и Q = (qx, qy), - это проверить, находится ли определитель матрицы

{{qx - px, qy - py}, {rx - px, ry - py}},

, а именно (qx - px) * (ry - py) - (qy - py) * (rx - px), близок к 0. Это решение имеет несколько связанных преимуществ перед другими опубликованными: во-первых, он не требует специального случая для вертикальных линий, во-вторых, он не делит (обычно медленная операция), в-третьих, он не вызывает плохого поведения с плавающей запятой, когда линия почти, но не совсем вертикальна.

19
ответ дан 30 November 2019 в 01:48
поделиться

Даны две точки на линии L0 и L1 и точка для проверки P .

               (L1 - L0) * (P - L0)
n = (P - L0) - --------------------- (L1 - L0)
               (L1 - L0) * (L1 - L0)

Норма вектор n - это расстояние от точки P от прямой через L0 и L1 . Если это расстояние равно нулю или достаточно мало (в случае ошибок округления), точка лежит на прямой.

Символ * представляет скалярное произведение.

Пример

P = (5, 5)

L0 = (0, 10)
L1 = (20, -10)

L1 - L0 = (20, -20)
P  - L0 = (5, -5)

              (20, -20) * (5, -5)
n = (5, -5) - --------------------- (20, -20)
              (20, -20) * (20, -20)

              200
  = (5, -5) - --- (20, -20)
              800

  = (5, -5) - (5, -5)

  = (0, 0)
7
ответ дан 30 November 2019 в 01:48
поделиться

Я думаю, что мистер Патрик Макдональд дал почти правильный ответ, и это исправление его ответа:

public bool IsOnLine(Point endPoint1, Point endPoint2, Point checkPoint)
{
    return (((double)checkPoint.Y - endPoint1.Y)) / ((double)(checkPoint.X - endPoint1.X))
        == ((double)(endPoint2.Y - endPoint1.Y)) / ((double)(endPoint2.X - endPoint1.X));
}

и, конечно, есть много других правильных ответов, особенно мистер Джош, но я нашел это лучший.

Спасибо за evryone.

6
ответ дан 30 November 2019 в 01:48
поделиться
y = m * x + c

Это уравнение линии. x и y - координаты. Каждая линия характеризуется своим наклоном (м) и местом, где она пересекает ось Y (c).

Таким образом, учитывая m и c для линии, вы можете определить, находится ли точка (x1, y1) на прямой, с помощью проверка, выполняется ли уравнение для x = x1 и y = y1

4
ответ дан 30 November 2019 в 01:48
поделиться

Если у вас есть линия, определенная ее конечными точками

PointF pt1, pt2;

, и у вас есть точка, которую вы хотите проверить

PointF checkPoint;

, то вы можете определить функцию следующим образом:

bool IsOnLine(PointF endPoint1, PointF endPoint2, PointF checkPoint) 
{
    return (checkPoint.Y - endPoint1.Y) / (endPoint2.Y - endPoint1.Y)
        == (checkPoint.X - endPoint1.X) / (endPoint2.X - endPoint1.X);
}

и вызвать ее следующим образом:

if (IsOnLine(pt1, pt2, checkPoint) {
    // Is on line
}

Однако вам нужно будет проверить деление на ноль.

3
ответ дан 30 November 2019 в 01:48
поделиться

2D-линия обычно представляется с использованием уравнения с двумя переменными x и y. Это хорошо известное уравнение.

y-y1 = (y1-y2)/(x1-x2) (x-x1)

Теперь представьте, что ваша линия GDI + нарисована от (0,0) до (100 , 100), то значение m = (0-100) / (0-100) = 1, таким образом, уравнение для вашей линии будет y-0 = 1 * (x-0) => y = x

Теперь, когда у нас есть уравнение для рассматриваемой линии, его легко проверить, принадлежит ли точка этой линии. Данная точка (x3, y3) принадлежит этой линии, если она удовлетворяет линейному уравнению, когда вы подставляете x = x3 и y = y3. Например, точка (10, 10) принадлежит этой линии, поскольку 10 = 10, но (10,12) не принадлежит этой линии, так как 12! = 10.

ПРИМЕЧАНИЕ. Для вертикальной линии значение наклона ( m) бесконечно, но для этого особого случая вы можете напрямую использовать уравнение для вертикальной линии x = c, где c = x1 = x2.

Хотя я должен сказать, что не уверен, что это наиболее эффективный способ сделать это. Я постараюсь найти более эффективный способ, когда у меня будет больше времени.

Надеюсь, это поможет.

2
ответ дан 30 November 2019 в 01:48
поделиться

Уравнение линии:

y = mx + c

Таким образом, точка (a, b) находится на этой линии, если она удовлетворяет этому уравнению, т.е. b = ma + c

1
ответ дан 30 November 2019 в 01:48
поделиться

Не могли бы вы уточнить?

О каком языке программирования вы говорите?

О какой среде вы говорите?

О каких «строках» вы говорите? Текст? Какой момент? XY на экране?

0
ответ дан 30 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: