Проверка допустимости модели направляющих на создает и обновляет только

Для визуализации возьмите цифровую клавиатуру клавиатуры. Если ключ '5' представляет Ваш прямоугольник, то все ключи 1-9 представляют 9 квадрантов пространства, разделенного на строки, которые составляют Ваш прямоугольник (с 5 являющийся внутренней частью.)

1), Если центр круга находится в квадранте 5 (т.е. в прямоугольнике) тогда, две формы пересекаются.

С этим из пути, существует два возможных случая: a) Круг пересекается с двумя или больше соседними краями прямоугольника. b) Круг пересекается с одним краем прямоугольника.

первый случай прост. Если круг пересекается с двумя соседними краями прямоугольника, он должен содержать угол, соединяющий те два края. (Что, или его центр находится в квадранте 5, который мы уже покрыли. Также обратите внимание, что случай, где круг пересекается с только двумя противопоставление края прямоугольника, покрыт также.)

2), Если какой-либо из углов A, B, C, D прямоугольника лежит в кругу, то две формы пересекаются.

второй случай более хитер. Мы должны сделать примечание, которого это может только произойти, когда центр круга находится в одном из квадрантов 2, 4, 6 или 8. (На самом деле, если центр будет на каком-либо из квадрантов 1, 3, 7, 8, соответствующий угол будет самой близкой точкой к нему.)

Теперь у нас есть случай, что центр круга находится в одном из 'граничных' квадрантов, и это только пересекается с соответствующим краем. Затем точка на краю, который является самым близким к центру круга, должна лечь в кругу.

3) Для каждого AB строки, до н.э, CD, DA, создает перпендикулярные строки p (AB, P), p (до н.э, P), p (CD, P), p (DA, P) через центр круга P. Для каждой перпендикулярной строки, если пересечение с исходным краем находится в кругу, то две формы пересекаются.

существует ярлык для этого последнего шага. Если центр круга будет в квадранте 8, и граничный AB является главным краем, точка пересечения будет иметь y-координату A и B, и x-координату центра P.

можно создать четыре пересечения строки и проверить, лежат ли они на своих соответствующих краях или узнают, в котором находится квадрант P, и проверьте соответствующее пересечение. Оба должны упростить до того же булевого уравнения. Опасайтесь этого, шаг 2 выше не исключил P, находящийся в одном из 'угловых' квадрантов; это просто искало пересечение.

Редактирование: Как оказалось, я пропустил очевидный факт, что № 2 является подслучаем № 3 выше. В конце концов, углы также являются точками на краях. См. ответ @ShreevatsaR ниже для большого объяснения. И в это время, забудьте № 2 выше, если Вы не хотите быструю, но избыточную проверку.

51
задан Jakub Arnold 9 August 2013 в 07:40
поделиться

2 ответа

По умолчанию проверки выполняются как для создания, так и для обновления. Так что это должно быть просто:

validates_presence_of :password

Клавиша: on просто позволяет вам выбрать один из них.

66
ответ дан 7 November 2019 в 10:15
поделиться

Only write:

validates_presence_of :password

No need...

on => :create
12
ответ дан 7 November 2019 в 10:15
поделиться
Другие вопросы по тегам:

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