Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

как узнать какие элементы масива принадлежат другому масиву   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.027 c
4-1083688325
AlexZ_CRC
2004-05-04 20:32
2004.06.13
Открыть <u> все </u> CDROM на компе


14-1085572105
kondryuk
2004-05-26 15:48
2004.06.13
нужен компилятор


1-1085848740
anonimus
2004-05-29 20:39
2004.06.13
Узнать код по исходной и шифрованной строке


3-1085402689
Cyber
2004-05-24 16:44
2004.06.13
создание Query-запросов


4-1084000717
Plesh
2004-05-08 11:18
2004.06.13
Как мне ламеру вернуть значки рабочего стола на место??