Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];
Внизкак узнать какие элементы масива принадлежат другому масиву Найти похожие ветки
← →
Lena19 (2004-05-27 17:44) [0]Всем привет.
есть масив
str:array of record Top,Left,Width,Height:integer;s:string[255]; end;
и известна прямоугольная область (задана высотой и шириной)
как узнать какие елементы масива принодлежат данной области ?
по возможности за минимальное количество шагов вичисления.
← →
GuAV © (2004-05-27 18:19) [1]
> и известна прямоугольная область (задана высотой и шириной)
имхо, маловато условия...
← →
default © (2004-05-27 18:24) [2]примерно то же что сказать: известная фигура(задана своей площадью), хотя тут не бескон-он множ-во вариантов потому что пиксели не "дробятся", но всё же...
← →
Ega23 © (2004-05-27 18:24) [3]Lena19 (27.05.04 17:44)
Зачёт?
← →
hamster © (2004-05-27 18:24) [4]Извините, а что значит "имхо"?
← →
default © (2004-05-27 18:26) [5]hamster © (27.05.04 18:24) [4]
по моему скромному мнению
← →
Ega23 © (2004-05-27 18:27) [6]hamster © (27.05.04 18:24) [4]
IMHO ( In My Humble Opinion ) по моему скромному мнению ( в сетях употребляется также непосредственно в виде "имхо" (существительное среднего рода) )
← →
Lena19 (2004-05-27 19:00) [7]to ega23 последний зачот был здан 12 лет назад.(а 19 ето мой возраст когда была мной написана прога Hello Word)
прямоугольная область (задана высотой и шириной) ето Canvas для отображения переменнй str координаты верхнего левого угла
всегда 0,0 а координаты нижнего правого угла меняются .
требуется узнать скока елементов масива str можно отобразить на канве.при условии что первый елемент масива не обязательно с координатами 0,0.
← →
default © (2004-05-27 19:05) [8]в чём сложность?
← →
VMcL © (2004-05-27 19:08) [9]>>hamster © (27.05.04 18:24) [4]
<offtopic>
В русской интерпретации также ИМХО = "имею мнение, хрен оспоришь".
</offtopic>
← →
Fay © (2004-05-27 19:44) [10]<offtopic TEXT="В русской интерпретации также ИМХО = имею мнение, хрен оспоришь"/>
8)
← →
jack128 © (2004-05-27 19:54) [11]
> "имхо" (существительное среднего рода) )
Cейчас придет ИМХО(с) и что то с тобой cделает за такие слова ;-)
> требуется узнать скока елементов масива str можно отобразить
> на канве
Тонкий намек - не забудь про TCanvas.ClipRect
← →
GuAV © (2004-05-28 00:11) [12]VMcL © (27.05.04 19:08) [9]
LOL
Не знал про эту интерпретацию. Буду тогда юзать англ. "IMHO"
"какие елементы масива принодлежат данной области"
"скока елементов масива str можно отобразить на канве"
- Так это 2 разных условия. Причем второе не совсем понятно.
← →
Lena19 (2004-05-28 17:22) [13]какие елементы масива (str[x].top,str[x].left) принодлежат данной области канвы(0,0,canvas.width,canvas.height) тобиш скока елементов str[x].s можно отобразить. (шрифт может менятся для каждой буквы переменной s)
для етго есть str.width str.height
← →
Ega23 © (2004-05-28 17:24) [14]Cейчас придет ИМХО(с) и что то с тобой cделает за такие слова ;-)
Это не со мной, это с Lingvo
← →
Erik1 (2004-05-28 17:29) [15]Тебе же в [11] прямо намекнули, что у Canvas это уже реализовано!
← →
Lena19 (2004-05-28 17:40) [16]to erik1
МОЖЕТ Я ЧЕГО НЕ ПОНИМАЮ (разъясните пожалуста)
но посчитать это надо до того как текст ляжет на канву
← →
KADAN © (2004-05-28 20:21) [17]я не понял вороса... понимаю еще когда проверяют принадлежность области другой области, а как проверить принадлежность строки пряоугольнику? может нужно разделить на килограммы? уточни пожалуйста вопрос.
← →
Lena19 (2004-05-28 23:16) [18]to kadan
внимательней смотри текст вопроса: STR[N].TOP;STR[N].LEFT;STR[N].HEIGHT;STR[N].WIDTH;тобиш каждая строка имеет координаты вывода и размер в пикселях
← →
GuAV © (2004-05-28 23:29) [19]
> какие елементы масива (str[x].top,str[x].left) принодлежат
> данной области канвы(0,0,canvas.width,canvas.height) тобиш
> скока елементов str[x].s можно отобразить
принодлежат - любая точка str[х] принадлежит множеству точек канвы.
отобразить - imho ещё и чтоб не перекрывались.
какие - множество элементов
скока - количество элементов.
to Lena19. отвечать на неточно сформулированный вопрос весьма затруднительно.
← →
miwa © (2004-05-29 07:26) [20]>>Cейчас придет ИМХО(с) и что то с тобой cделает за такие слова ;-)
type
TOfftopic = record
text: string;
end;
var Offtopic: TOfftopic;
begin
Offtopic.Text:="Я плакал :о))))))))))))))))))))))))))))))))))";
end;
← →
KADAN © (2004-05-29 09:02) [21]>lena19
можно создать двумерный массив (ширина, высота) из нулей, затем в цикле перебирать все записи, если все точки записи - нули в новом массиве, тогда эту запись пометить как входящую, а точки - единичками в новом массиве. тогда ничего не будет перекрываться. самый простой вариант... но... задача усложнится, если надо расположить как можно больше строк в этом прямоугольнике.
← →
GuAV © (2004-05-29 10:36) [22]
> точки записи - нули в новом массиве, тогда эту запись пометить
> как входящую, а точки - единичками в новом массиве. тогда
> ничего не будет перекрываться
Проверять каждую из записей на непринадлежноость всем подходящим предыдущим - ещё проще.
> задача усложнится, если надо расположить как можно больше
> строк в этом прямоугольнике.
вот и я говорю - нужна точная формулировка. Может их ещё и двиать можно.
Кстати, чтоза задача специфическая? Обычно, имхо, пользуют простой string вместо всего этого record"a а у канвы сть св-во TextExtent.
← →
jack128 © (2004-05-29 10:45) [23]
type
// orInside - прямоугольник находится ВНУТРИ другого прямоугольника
// orOverlapped - прямоугольники ЧАСТИЧНО перекрываются
// orOutside - прямоугольник находится ВНЕ другого прямоугольника
TOverlappedRectState = (orInside, orOverlapped, ovOutside);
// вычисляет положение прямоугольника Rect относительно BaseRect
function GetOverlappedState(Rect, BaseRect: TRect): TOverlappedRectState;
begin
if (Rect.Top > BaseRect.Bottom) or (Rect.Left > BaseRect.Right) or
(Rect.Bottom < BaseRect.Top) or (Rect.Right < BaseRect.Left) then
Result := orOutSize else
if (Rect.Top >= BaseRect.Top) and (Rect.Left >= BaseRect.Left) and
(Rect.Bottom <= BaseRect.Bottom) or (Rect.Right <= BaseRect.Right) else
Result := orOverlapped;
end;
Примерif GetOverlappedState(str[i], Canvas.ClipRect) <> orOutSize then
// эту строчку нужно нарисовать
← →
Глеб © (2004-05-29 10:47) [24]ИМХО
var
x: array of TRec;
begin
if random(2) = 0 then
label1.caption := "входит"
else
label1.caption := "посмотри на Label2";
label2.caption := "не входит! облом!;
end;
← →
jack128 © (2004-05-29 10:56) [25]Только все это бред, потому что Canvas все равно не отрисует то что выходит за приделы СlipRect - внутри, где то в недрах виндоус происходит точно такая же проверка..
← →
GuAV © (2004-05-29 10:57) [26]
> if GetOverlappedState(str[i], Canvas.ClipRect) <> orOutSize
> then
Нифинга подобного. Если даже Typecast сделать, то все равно:
> str:array of record Top,Left,Width,Height:integer;s:string[255];
> end;
т.е. Top и Left наоборот, а вмеснто Right, Bottom - Width,Height
← →
jack128 © (2004-05-29 11:02) [27]
> > str:array of record Top,Left,Width,Height:integer;s:string[255];
>
> > end;
а ну да.Нобратил внимания
type
StrData = record
Top,Left,Width,Height:integer; // хотя по мне так лудше заменить эти поля на Rect: TRect;
s:string[255];
end;
function GetRect(d: TStrData): TRect
begin
// тут сама догодайся, что писать..
end;
if GetOverlappedState(GetRect(str[i]), Canvas.ClipRect) <> orOutSize
← →
GuAV © (2004-05-29 11:02) [28]Пока автор сией ветки не ответит на [22],
мы врядли продвинемся сколь-нибуть далее :-(
← →
Глеб © (2004-05-29 13:48) [29]А пока кто-нибудь не ответит на [24], ничего хорошего тем более не будет.
← →
Anatoly Podgoretsky © (2004-05-29 13:53) [30]IntersectClipRect и справка по Clipping Functions
← →
Глеб © (2004-05-29 13:57) [31]надо random вгонять
← →
GuAV © (2004-05-29 14:32) [32]<offtopic>
> А пока кто-нибудь не ответит на [24], ничего хорошего тем
> более не будет.
Отвечаю на 24:
- Какова вероятность что выйдя на улицу встретите динозавра
- 50%. Или встречу или нет.
т.е. приведеный алгоритм рабочий.
</offtopic>
← →
KADAN © (2004-05-29 16:38) [33]>GuAV © (29.05.04 10:36) [22]
>Проверять каждую из записей на непринадлежноость всем подходящим предыдущим - ещё проще
Спасибо, что поправил, как-то я сам не подумал :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.153 c