Похоже, что ActionLink всегда использует, называет HttpUtility. Закодируйте на тексте ссылки. Вы могли использовать UrlHelper, чтобы генерировать href и создать тег привязки сами.
<a href='@Url.Action("Posts", ...)'>More…</a>
, Кроме того, можно "декодировать" строку, которую Вы передаете ActionLink. Построение ссылки в HTML, кажется, немного более читаемо (мне) - особенно в Бритве. Ниже эквивалент для сравнения.
@Html.ActionLink(HttpUtility.HtmlDecode("More…"), "Posts", ...)
Используйте знак определителя векторов (AB, AM)
, где M (X, Y)
- точка запроса:
position = sign((Bx - Ax) * (Y - Ay) - (By - Ay) * (X - Ax))
Это 0
на линии и +1
с одной стороны, -1
с другой стороны.
Используя уравнение линии ab , получите координату x на линии с той же координатой y, что и точка, подлежащая сортировке.
Вектор (y1 - y2, x2 - x1)
перпендикулярен линии и всегда указывает вправо (или всегда указывает влево, если ориентация вашей плоскости отличается от мой).
Затем вы можете вычислить скалярное произведение этого вектора и (x3 - x1, y3 - y1)
, чтобы определить, находится ли точка на той же стороне линии, что и перпендикулярный вектор (скалярное произведение> 0
) или нет.
Вы смотрите на знак определителя из
| x2-x1 x3-x1 |
| y2-y1 y3-y1 |
Он будет положительным для точек с одной стороны и отрицательным с другой (и нулем для точек на самой прямой).
Попробуйте этот код, который использует перекрестное произведение :
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, точки коллинеарны.
Если линия горизонтальна, то возвращается истина, если точка находится над линией.
Сначала проверьте, есть ли у вас вертикальная линия:
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