Re[2]: рассудите: x1,y1,x2,y2 vs x,y,width,height
От: Кодт Россия  
Дата: 18.10.05 14:33
Оценка: 16 (4) +1 :)
Здравствуйте, 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]

Также допустим, что координаты и габариты — переменные. Приложения, в которых опорная точка неподвижна, а размеры варьируются (либо наоборот, размеры фиксированы, а движется опорная точка) требуют одну модель; приложения, в которых прямоугольник независимо обтёсывается со всех сторон — другую.
Первая модель и встречается чаще, и функционально богаче.

Итого, мой выбор — опорная точка,размеры,опции выравнивания.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.