Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

не получается сделать хитрый алгоритм :(   Найти похожие ветки 

 
tester1   (2002-12-16 10:51) [0]

есть у меня такой массив

1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 4 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 4 0 0 0 0 5 0 0 0 0 0 6 0 0 7 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 10 0 0 0 11 0 0 0 0 0 12 0 0 13 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

такого типа, через две строчки нулей
следуют строчки с цифрами причем цифры
идут примерно по вертикали. мне нужно бы сделать так, чтобы строка с цифрами 1 2 3 4 сдвинулась(прибавить что-ли или как?)
относительно строки с цифрами 10 11 12 13, т.е. как бы выровнять строчки. Есть ли библиотека, которая такие вещи умеет делать?

Бъюсь уже второй день, не могу понять, как это сделать... :((
походу ощущается нехватка какой-то идеи, на предмет того, как сдвинуть верхние строки относительно нижних, чтобы были примерно одинаковые цифры друг над другом.

Если кто делал что-то подобное, подскажите, как тут подступтся?

Спасибо!


 
Reindeer Moss Eater   (2002-12-16 10:57) [1]

Пока количество нулей в начале первой строки меньше 1 делать "0"+ первая строка


 
han_malign   (2002-12-16 11:01) [2]


0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 4 0 0 0 0 5 0 0 0 0 0 6 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10 0 0 0 11 0 0 0 0 0 12 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


 
han_malign   (2002-12-16 11:02) [3]

чушь какя то, откуда вообще этот массив и что в нем лежит???


 
Reindeer Moss Eater   (2002-12-16 11:07) [4]

..такого типа, через две строчки нулей ...

Строчки там лежат :)


 
tester1   (2002-12-16 11:17) [5]

2Reindeer Moss Eater - это немножко не то, либо я не вьехал в то что ты сказал :((

хм. немного не так, у меня есть 12, ближайшее к нему по вертикали вверх - 6, так вот надо прибавить к ближайшему к двенадцати такое число, чтобы получилось 12 над 12-ю, т.е. в одном столбце. Как это сделать - непойму. Пытался полигоном построить маленькие ччетырехугольники, чтобы по аналогии сделать сдвигающий алгоритм, но оно рисует в результате прямоугольники :((

const VidH=288; VidW=352; aa=2;
...

for i:=1 to VidH-1 do begin if (int(i)/aa=int(i/aa)) then begin
for j:=0 to VidW-1 do begin
if (aaa3[i,j]<>0) then begin
x1:=i; y1:=j;
Polygon([Point(y1,x1),
Point(y1,x2),
Point(y2,x2),
Point(y2,x1)]);
x2:=i-aa; y2:=j;
end;
end;
end;
end;

условие (int(i)/aa=int(i/aa)) - как раз и проверяет, что если есть строка под номером aa или кратная ей(т.е. в ней цифры), то проводить связывание по вертикали...

но оно таким образом рисует прямые горизонтальные прямоугольники, а я хочу, чтобы рисовало именно некие четырехугольники методом полигона в соответствии с положением(но не значением) значащих цифр. т.е. если 13 в нижней строке сдвинуты относительно 7 в верхней на 1 позицию например вправо, то прибавить к 7 6 и передать координаты в полигон. Полигон я сам нарисую, но как сдвигать эти цифры. Причем фишка в том, что цифры могут стоять в один ряд разные вверху, ну их сдвинуть нужно...

число строк только с нулями фиксировано, т.к. всегда двум(или трем, или пяти, не суть вобщем) равно...

вот такая вот чертовщина непонятная...


 
tester1   (2002-12-16 11:28) [6]

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

for x:=0 to VidW-1 do for y:=11 to VidH-11 do begin
if (int(y)/aa=int(y/aa)) and (sqr(x-180)+sqr(y-145)<=sqr(149)) then
aaa1[y,x]:=byte(Image2.Canvas.Pixels[x,y] and $ff);
end;
end;

т.е. это на самом деле вертикальные полоски, они могут быть кривыми слегка(мне вот надо связать числа. чтобы обна полоса была 12 напимер), наличие цифры это вертикальная полоска, нули вставлены потому, что читаю через несколько строк, чтобы быстрее работало. Условие "if (int(y)/aa=int(y/aa)) and (sqr(x-180)+sqr(y-145)<=sqr(149)) then" значит что читать каждую aa-тую строчку в пределах круга(картинка круглая просто), который определяю уравнением круга(sqr(x-180)+sqr(y-145)<=sqr(149))... Т.е. смысл в том, чтобы отследить номер полоски, а полоска задана в массиве вертикальным столбиком чисел через фиксированное число строк. т.е. я могу судить о том, что есть полоска, но не могу о том, какая это полоска.

Уважаемые мастера, подскажите, как это реализовать? я уже опух... лыжи не едут :((
thanks!


 
Reindeer Moss Eater   (2002-12-16 11:31) [7]

просто числа уравнять сверху и снизу
Картинки, строки, числа, какие-то линии .......

ЧТО В МАССИВЕ ЛЕЖИТ???? Если это вообще массив.


 
tester1   (2002-12-16 11:46) [8]

есть картинка, на ней нарисованы вертикальные чуть чуть кривоватые линии. я читаю в массив картинку так, что получается массив

010002000300040
010002000300040
010002000300040
010002000300040
010002000300040

т.е. реально единица над единицей, вертикальный столбик, на картинке это соответствует вертикаьной прямой. т.е. в графическом виде это получается четыре вертикальные полоски. значение цифры, это номер строчки. Но тут все в порядке, картинка квадратная. Но с моего девайса картинка круглая(девайс так устроен :(( ):

0000000000000100020000000000000
0000000001000200030004000000000
0000010002000300040005000600000
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0000010002000300040005000600000
0000000001000200030004000000000
0000000000000100020000000000000

мне надо получить такой массив:

0000000000000400050000000000000
0000000003000400050006000000000
0000030003000400050006000700000
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0000030003000400050006000700000
0000000003000400050006000000000
0000000000000400050000000000000

нормальная строка это строка в которой есть цифры до 8-ми. т.е. на самом деле, цифра 1 в первой строчке соответствует цифре 4 в строчке, где есть цифра 8...

Дык, мне надо сделать так, чтобы можно было бы 1 заменить на 4, а 2 заменить на 5, т.е. как будто бы у меня нет этого круга. Девайс просто дает круговую картинку.

Еще такая фишка, что на самом деле массив выглядит как то так(читаю черезстрочно для ускорения считывания картинки):

0000000000000100020000000000000
0000000000000000000000000000000
0000000001000200030004000000000
0000000000000000000000000000000
0000010002000300040005000600000
0000000000000000000000000000000
0100020003000400050006000700080
0000000000000000000000000000000
0100020003000400050006000700080
0000000000000000000000000000000
0100020003000400050006000700080
0000000000000000000000000000000
0100020003000400050006000700080
0000000000000000000000000000000
0000010002000300040005000600000
0000000000000000000000000000000
0000000001000200030004000000000
0000000000000000000000000000000
0000000000000100020000000000000

т.е. чего тут сделать можно - не просекаю...


 
Reindeer Moss Eater   (2002-12-16 11:54) [9]

т.е. чего тут сделать можно - не просекаю...

Внимательно вчитаться в вопросы, тебе задаваемые.


 
tester1   (2002-12-16 12:02) [10]

0000000000000100020000000000000
0000000001000200030004000000000
0000010002000300040005000600000
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0000010002000300040005000600000
0000000001000200030004000000000
0000000000000100020000000000000

первый ноль - это нулевой элемент массива aaa1[0,0], второй ноль это aaa1[0,1], третий ноль это aaa1[0,2], четвертый ноль это aaa1[0,3] и т.д., в третьей строке первое значение третьей строки aaa1[3,0]:=0, второе значение третьей строки aaa1[3,1]:=1, третье значение третей строки aaa1[3,2]:=0 и т.д.

вобщем из(это массив) этого:

0000000000000100020000000000000
0000000001000200030004000000000
0000010002000300040005000600000
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0000010002000300040005000600000
0000000001000200030004000000000
0000000000000100020000000000000

получить это:

0000000000000400050000000000000
0000000003000400050006000000000
0000030003000400050006000700000
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0100020003000400050006000700080
0000030003000400050006000700000
0000000003000400050006000000000
0000000000000400050000000000000

вобщем одним словом не хватает
моих мозгов на это дело :(((
идея какаяннить нужна
а еулевые строки я сам вставлю как-ннить исхитрюсь...
Спасибо большое!

p.s. взамен могу перловый скрипт какойннить гостевухи или закачки файлов на сервер через http сделать. Или чтобы мейлы слало само по нажатию кнопки из интернета.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
6-86055
Ajax
2002-10-29 18:01
2002.12.26
Кому нужен подсчет dial-up траффика под win9x???


1-85964
wicked
2002-12-15 03:11
2002.12.26
наследование TGraphic


14-86105
KSergey
2002-12-04 15:18
2002.12.26
Настройка прав доступа к свойствам IE


14-86124
Slava_K
2002-12-05 09:17
2002.12.26
Пакет обновления SP для Delphi 7


6-86068
pianist
2002-10-30 11:47
2002.12.26
PHP4Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский