Несколько мыслей достойных рассмотрения здесь;
По часовой стрелке только значимо относительно источника. Я был бы склонен думать об источнике как о центре тяжести ряда точек. например, По часовой стрелке относительно точки в среднем положении четырех точек, а не возможно очень удаленного источника.
, Если у Вас есть четыре точки, a, b, c, d, там существует несколько по часовой стрелке упорядочивания тех точек вокруг Вашего источника. Например, если (a, b, c, d) сформировал по часовой стрелке упорядочивание, так был бы (b, c, d, a), (c, d, a, b) и (d, a, b, c)
, Ваши четыре точки уже формируют полигон? Если так, это - вопрос проверки и инвертирования обмотки вместо того, чтобы сортировать точки, например, a, b, c, d становится d, c, b, a. В противном случае я отсортировал бы на основе переноса соединения между каждой точкой и источником согласно ответу Клиньев.
Редактирование: относительно Ваших комментариев, который указывает на подкачку;
В случае треугольника (a, b, c), мы можем сказать, что это по часовой стрелке, если третья точка c, имеет на правой стороне строку ab. Я использую следующую функцию стороны для определения этого на основе координат точки;
int side(double x1,double y1,double x2,double y2,double px,double py)
{
double dx1,dx2,dy1,dy2;
double o;
dx1 = x2 - x1;
dy1 = y2 - y1;
dx2 = px - x1;
dy2 = py - y1;
o = (dx1*dy2)-(dy1*dx2);
if (o > 0.0) return(LEFT_SIDE);
if (o < 0.0) return(RIGHT_SIDE);
return(COLINEAR);
}
, Если у меня есть четыре точки выпуклый полигон, (a, b, c, d), я могу рассмотреть это как два треугольника, (a, b, c) и (c, d, a). Если (a, b, c) против часовой стрелки, я изменяю обмотку (a, b, c, d) к (a, d, c, b) для изменения обмотки полигона в целом к по часовой стрелке.
я настоятельно рекомендую тянуть это с несколькими точками выборки, видеть то, о чем я говорю. Обратите внимание, что у Вас есть много исключительных случаев для контакта с, такие как вогнутые полигоны, колинейные точки, совпадающие точки, и т.д.
Я использовал FluentValidation вместе с плагином проверки jQuery , но все еще не могу найти ситуацию, с которой они не справятся.
Мне нравится xVal .
С его помощью вы можете очень легко реализовать проверку клиента и сервера. Также есть поддержка проверки столбцов (свойств) для сущностей, которые вы хотите использовать.
DataAnnotations , реализованные приятельскими классами и Проверка клиента JQuery
Убедитесь, что вы используете MVC Preview 2
Возможно, вас заинтересует подход делегирования . Я был потому, что мне не нравилась идея xVal (решение, которое я сейчас использую) и тот факт, что она, похоже, не обслуживала сложные случаи проверки, которые пересекали несколько свойств одной и той же или даже разных структур классов.