Как сказать, является ли точка к правой или левой стороне строки

Похоже, что ActionLink всегда использует, называет HttpUtility. Закодируйте на тексте ссылки. Вы могли использовать UrlHelper, чтобы генерировать href и создать тег привязки сами.

<a href='@Url.Action("Posts", ...)'>More&hellip;</a>

, Кроме того, можно "декодировать" строку, которую Вы передаете ActionLink. Построение ссылки в HTML, кажется, немного более читаемо (мне) - особенно в Бритве. Ниже эквивалент для сравнения.

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
112
задан Michael Myers 16 April 2014 в 05:36
поделиться

6 ответов

Используйте знак определителя векторов (AB, AM) , где M (X, Y) - точка запроса:

position = sign((Bx - Ax) * (Y - Ay) - (By - Ay) * (X - Ax))

Это 0 на линии и +1 с одной стороны, -1 с другой стороны.

181
ответ дан 24 November 2019 в 02:45
поделиться

Используя уравнение линии ab , получите координату x на линии с той же координатой y, что и точка, подлежащая сортировке.

  • Если точка x> x линии, точка находится справа от линии.
  • Если точка x
  • Если точка x == x линии, точка находится на прямой.
4
ответ дан 24 November 2019 в 02:45
поделиться

Вектор (y1 - y2, x2 - x1) перпендикулярен линии и всегда указывает вправо (или всегда указывает влево, если ориентация вашей плоскости отличается от мой).

Затем вы можете вычислить скалярное произведение этого вектора и (x3 - x1, y3 - y1) , чтобы определить, находится ли точка на той же стороне линии, что и перпендикулярный вектор (скалярное произведение> 0 ) или нет.

9
ответ дан 24 November 2019 в 02:45
поделиться

Вы смотрите на знак определителя из

| x2-x1  x3-x1 |
| y2-y1  y3-y1 |

Он будет положительным для точек с одной стороны и отрицательным с другой (и нулем для точек на самой прямой).

40
ответ дан 24 November 2019 в 02:45
поделиться

Попробуйте этот код, который использует перекрестное произведение :

public bool isLeft(Point a, Point b, Point c){
     return ((b.X - a.X)*(c.Y - a.Y) - (b.Y - a.Y)*(c.X - a.X)) > 0;
}

Где a = точка линии 1; b = прямая точка 2; c = точка для проверки.

Если формула равна 0, точки коллинеарны.

Если линия горизонтальна, то возвращается истина, если точка находится над линией.

200
ответ дан 24 November 2019 в 02:45
поделиться

Сначала проверьте, есть ли у вас вертикальная линия:

if (x2-x1) == 0
  if x3 < x2
     it's on the left
  if x3 > x2
     it's on the right
  else
     it's on the line

Затем вычислите наклон: m = (y2-y1)/(x2-x1)

Затем составьте уравнение линии, используя форму наклона точки: y - y1 = m*(x-x1) + y1. Для удобства объяснения упростите его до формы наклон-перехват (в вашем алгоритме это не обязательно): y = mx+b.

Теперь подставьте (x3, y3) для x и y. Вот псевдокод, подробно описывающий, что должно произойти:

if m > 0
  if y3 > m*x3 + b
    it's on the left
  else if y3 < m*x3 + b
    it's on the right
  else
    it's on the line
else if m < 0
  if y3 < m*x3 + b
    it's on the left
  if y3 > m*x3+b
    it's on the right
  else
    it's on the line
else
  horizontal line; up to you what you do
4
ответ дан 24 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

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