Здравствуйте, JFreeM, Вы писали:
lpc>>У нас с коллегой возник философский спор на тему того, какой способ задания прямоугольника семантически (именно семантически) богаче: задание двух точек или задание точки и размера.
lpc>>Я утверждаю, что семантически оба способа абсолютно эквиваленты. Мой коллега считает, что второй способ (точка + размер) — семантически богаче, поскольку такой способ оперирует сразу двумя понятиями: точка и размер, в то время как первый способ лишь одним — точкой.
lpc>>Рассудите наш спор
JFM>ИМХО, эквиваленты, поскольку размер — вектор — та же самая точка. А посему понятие остается одно — точка.
Две точки, так же, как и точка и размер — это
некорректные способы задания прямоугольника. Что, если "верхняя левая" точка находится ниже "правой нижней"? В какую сторону от опорной точки отсчитывается размер?
Прямоугольник можно задать двумя отрезками — проекциями на оси координат. Т.е. [x1,x2]*[y1,y2] (Так даже корректнее в теоретико-множественном смысле).
Каждый из отрезков задаётся
— упорядоченной парой чисел (x1,x2), x1<=x2 --> [x1,x2]
— парой координата,размер (x,dx), dx>=0, --> [x,x+dx]
или
— неупорядоченной парой (x1,x2) --> [min(x1,x2),max(x1,x2)] либо [x1,max(x1,x2)], либо [min(x1,x2),x2]
— аналогично, координатой и произвольной дельтой
кстати, необязательно считать опорные точки концевыми
— (x,dx) --> [x-|dx/2|,x+|dx/2|]
Именно из-за последнего пункта можно утверждать: точка,размеры более богата, чем пара точек.
Потому что она позволяет отсчитывать координаты краёв от этой точки произвольным способом
((x,y),(dx,dy),(ax,ay)) где dx,dy — неотрицательные, а ax,ay — опции выравнивания (влево/вверх, в обе стороны, вправо/вниз).
Которые, кстати говоря, можно задавать не флагами, а процентами — как опорная точка разбивает отрезок
[x-a*dx,x+(1-a)*dx]
a=0.0 --> выравнивание влево, [x,x+dx]
a=0.5 --> центрирование, [x-dx/2,x+dx/2]
a=1.0 --> выравнивание вправо, [x-dx,x]
Также допустим, что координаты и габариты — переменные. Приложения, в которых опорная точка неподвижна, а размеры варьируются (либо наоборот, размеры фиксированы, а движется опорная точка) требуют одну модель; приложения, в которых прямоугольник независимо обтёсывается со всех сторон — другую.
Первая модель и встречается чаще, и функционально богаче.
Итого, мой выбор — опорная точка,размеры,опции выравнивания.