Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: dmmarch
Дата сообщения: 20.09.2009 12:50
сужена картинка - это просто проэкция, речь не про это.
в массиве 3 значения
х (широта), у(долгота) и например высота (топография)
с цветами все ясно тут вопросов нет, как садить точку с этим цветом?
географические координаты и координаты в битмапе?
По поводу псевдо 3Д, Вы видите "тени" структур? Я имел ввиду их
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 12:55
хы, кому интересно, вот нашел по шифрованиям не плохую страничку с кодами
http://www.cyberforum.ru/pascal/thread33245.html#post156624

все еще актуален вопрос с радиокнопками
Автор: Hiken
Дата сообщения: 20.09.2009 13:02

Цитата:
как садить точку с этим цветом?

А в чем сложность? Обычная отрисовка: определяете зависимость координат изображения от координат на карте. Пробегаетесь по всем: рассчитываете цвет в засимости от значения высоты, ставите точку в памяти. По окончании пробега - отрисывываете всю карту в окне.
Тени - это уже сами смотрите, от чего они зависят, и программируйте такую зависимость. У вас есть еще два параметра, влияющие на цвет: насыщенность и яркость.
Автор: dmmarch
Дата сообщения: 20.09.2009 13:06
Hiken
Спасибо, буду пробовать
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 13:20
все, с радиобутонами разобрался ^^
Автор: V1s1ter
Дата сообщения: 20.09.2009 13:27
dmmarch
Для правильного совета нужен весь перечень задач.
Например, если отрисовать и не напрягаться GLScene.
Сразу рисуем в 3D с источником света. Ставим точку обзора сверху и все.
Дык, не забудьте правильно пересчитать координаты из элипсоидных в плоскостные - если требуется правильный масштаб, если нет то можно просто и не пересчитывать.
И еще обратите внимание на развитие проекта - нескажут ли завтра - а теперь редактируем...
Hiken
По поводу теней - "что то придумать" легко если тени не реальные, а когда источник света это отрезок параллельный одной из сторон, а в остальных случаях возникают нюансы...
В общем если объем карты позволяет лучше сразу в 3D и для простоты в GLScene.
Можно перевести координаты а 3DS файл скелета и наложить на него текстуру подготовленную ранее предложенным методом и отобразить в любым компонентом "View3DS".
dmmarch
Еще можно использовать ArcGIS SDK для формирования данных а смотреть в ArcGIS view.

Добавлено:
Hiken
Простите за оффтоп, поздравляю, у Вас 1000 сообщений!
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 13:35

Код: function TForm1.Cesar_Crypt():string;
const
SizeA = 26;
RusA = 'abcdefghijklmnopqrstuvwxyz';
var i, P :integer;
temp,s:string;
begin
s:=AnsiLowerCase(Edit1.Text);
temp:='';
for i := 1 to length(s) do if pos(s[i],RusA)<>0 then temp:=temp+s[i];
s:=temp;
for i:=1 to length(s) do
begin
P:=pos(s[i],RusA)+1;
if P>SizeA then P:=P-SizeA;
Result:=Result+RusA[P];
end;
Edit2.Text := Result;
end;
Автор: V1s1ter
Дата сообщения: 20.09.2009 13:44
Delta RuBoard
может так

Код:
const
SizeA = 27;
RusA = #32'abcdefghijklmnopqrstuvwxyz';
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 13:50
не, не канает=\
Автор: Frodo_Torbins
Дата сообщения: 20.09.2009 13:54
Delta RuBoard
В вашем варианте ведь формируется новая строка: "Result:=Result+RusA[P];". Вот сюда и надо добавить условие про пробелы. Или гляньте мой вариант. Там новая строка не создается, а изменяется существующая.
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 13:59

Цитата:
Delta RuBoard
В вашем варианте ведь формируется новая строка: "Result:=Result+RusA[P];". Вот сюда и надо добавить условие про пробелы. Или гляньте мой вариант. Там новая строка не создается, а изменяется существующая.

вставил твой код, заменяет asd asd xyz на hzk hzk FGH при дельта =1.. что то не то(


Автор: dmmarch
Дата сообщения: 20.09.2009 14:07
V1s1ter
Спасибо за совет, редактировать ничего не нужно делаю для себя.
По поводу GLScene можно немного подробней, я вчера его скачал и почитал немного, но проблема в том что данные - хаотичный набор, тоесть не равно удалены. Кокой из компонент использовать в моем случае?
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 14:11

Цитата:
Вот сюда и надо добавить условие про пробелы.

а можно подробнее немного? просто я с делфи дружу только второй день
Автор: Frodo_Torbins
Дата сообщения: 20.09.2009 16:06
Delta RuBoard

Цитата:
вставил твой код, заменяет asd asd xyz на hzk hzk FGH при дельта =1.. что то не то(

Нда, оказалось что в стандартной таблице кодов между "Z"и "a" еще есть несколько других символов. Придется применить подход как в вашей Cesar_Crypt, и создать свою таблицу. Будет нечто такое:

Код: [no]function TForm1.Code(Input: string): string;
var
tempS: string;
i, newVal: integer;

const
delta = 7; //будем сдвигать на delta символов
WorkingArray = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//наша таблица символов
WorkingLength = Length(WorkingArray); //длина таблицы

begin
tempS := Input;

for i := 1 to Length(tempS) do //пробегаемся по строке
begin
newVal := pos(tempS[i], WorkingArray); //находим номер символа в таблице

if newVal <> 0 then //если символа в таблице нет, то ничего не делаем
begin
newVal := newVal + delta; //номер нового символа
if newVal > WorkingLength then //если вышли за границы набора
newVal := newVal - WorkingLength; //то возвращаемся в начало
tempS[i] := WorkingArray[newVal]; //подставляем в строку нужный символ
//из таблицы
end;
end;

Result := tempS;
end;[/no]
Автор: V1s1ter
Дата сообщения: 20.09.2009 17:43
dmmarch

Цитата:
анные - хаотичный набор, тоесть не равно удалены. Кокой из компонент использовать в моем случае

Это не имеет значение, в смысле условие равноудаленности не обязательное.
Есть такое понятие "триангуляция" в нашем случае это группировка всех точек по 3 штуки для рисования одного треугольника. Есть несколько алгоритмом один из них назван по имени автора Делоне (Delone). Но эти алгоритмы нужны если все действительно хаотично.
Если точки расположены хоть както закономерно все модно упростить. Начни с описания процедуры рисования серии треугольников в OpenGL - думаю немного станет яснее.

Добавлено:
Delta RuBoard

Цитата:
не, не канает=\

Значит я неправильно понял что Вы хотите.
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 17:55
V1s1ter
после прохода функции кодирования в тексте пропадают пробелы
Автор: V1s1ter
Дата сообщения: 20.09.2009 18:08
Delta RuBoard
Есть немного свободного времени - могу помочь, но сбрось все условие полностью.

Добавлено:
Delta RuBoard
И если не трудно пример что на входе и что должно получится.

Добавлено:
Delta RuBoard
код в сообщении выше Вас устраивает,и пробелы должны отставатся на месте то так:

Код:
вместо
for i := 1 to length(s) do if pos(s[i],RusA)<>0 then temp:=temp+s[i];
написать
for i := 1 to length(s) do if (pos(s[i],RusA)<>0) or (s[i] =#32) then temp:=temp+s[i];
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 20:05

Цитата:
И если не трудно пример что на входе и что должно получится.

in
'abc xyz'
out
'bcd yza' (если просто оставляем пробелы)
или же
'bcdayz ' (если пробел тоже заменяется на след по счету символ)

подставил твой код, получил результат
'abc xyz' => 'bcd yz '

Добавлено:
p.s. если можно, то на ты =)

Добавлено:
то есть то что получилось не будет давать правильное решение, так как в out мы получаем выражение с двумя пробелами, а должен быть только один

Добавлено:
а, и еще, где можно почитать про символы вида "#32" ?
Автор: V1s1ter
Дата сообщения: 20.09.2009 21:13
Delta RuBoard

Цитата:
а, и еще, где можно почитать про символы вида "#32" ?

Запись "#число" означает, что это символ с кодом = число
Запись "$число" означает что это число записано в шестнадцатиричном виде
#32 = пробел
#$41 = "A"
Саму процедуру чуть позже...

Добавлено:
Delta RuBoard
Src - строка для кодирования
ABC - алфавит
Delta - смещение "скрытого" алфавита
Все символы, кроме пробела, в Src, которых нет в алфавите удаляются.
Пробелы остаются на своем месте.
Функция не оптимизирована, но работает.

Код:
function Cesar_Crypt(Src, ABC: String; Delta: Integer): String;
var
i, SizeA :integer;
s: string;
begin
SizeA := Length(ABC);
Result := '';
s := '';
for i := 1 to length(Src) do
if (Pos(Src[i], ABC) > 0) or (Src[i] = ' ') then s := s+Src[i];
for i := 1 to length(s) do
if s[i] = ' ' then Result := Result+' '
else begin
Result := Result+ABC[((Pos(s[i], ABC)-1+Delta) mod SizeA)+1]
end;
end;
Автор: Delta RuBoard
Дата сообщения: 20.09.2009 23:12
угу, спасибо, работает. а для обратного алгоритма дешифрации что меняется на что? а то чтото шаманил шаманил а толку нет. наиболее подходящим было

Код: if P > 0 then Result := Result+ABC[((P+1-Delta) mod SizeA)-1]
Автор: V1s1ter
Дата сообщения: 21.09.2009 00:16
Delta RuBoard
Для последнего варианта

Код:
вместо
if P > 0 then Result := Result+ABC[((P-1+Delta) mod SizeA)+1]
по идее нужно
if P > 0 then Result := Result+ABC[((P-1-Delta) mod SizeA)+1]
Автор: Aleksandr N
Дата сообщения: 21.09.2009 00:25
Мажет кто знает как прикрутить сертификат к своей программе?
И как правильно создать сертификат?
Автор: Delta RuBoard
Дата сообщения: 21.09.2009 00:54
делаю
'abc xyz' => coding => 'bcd yza' => decoding => 'abc xy'
Автор: Hiken
Дата сообщения: 21.09.2009 01:05
Aleksandr N
Вы имеете ввиду цифровую подпись? Для начала за нее нужно заплатить - самоподписанное приложение никому не нужно. Ну а после уже использовать микрософтовские утилиты. Как именно - описано, например, здесь.
Автор: V1s1ter
Дата сообщения: 21.09.2009 01:25
Delta RuBoard
Ну раз неспится, то:
Фокус в том, что при декодировании используется та же самая функция, что и при кодировании, но с другой дельта равной размер алфавита минус дельта при которой кодировалось.
или
скопировать функцию кодирования, обозвать ее функция декодирования и вставить одну строку
begin
SizeA := Length(ABC);
Delta := SizeA-Delta; <- вот эту
Result := '';
...


Добавлено:
Из постановки задачи ясно, что дельта не может быть больше чем размер алфавита
Автор: andrewtishkin
Дата сообщения: 21.09.2009 01:28

Цитата:
Для начала за нее нужно заплатить

Официальное описание (сертификация под Win7)

Цитата:
самоподписанное приложение никому не нужно

Ну иногда-таки нужно Правда для полноты картины потребуется установить свой сертификат в системное хранилище
Автор: Delta RuBoard
Дата сообщения: 21.09.2009 01:29

Цитата:
Delta RuBoard
Ну раз неспится, то:
Фокус в том, что при декодировании используется та же самая функция, что и при кодировании, но с другой дельта равной размер алфавита минус дельта при которой кодировалось.
или
скопировать функцию кодирования, обозвать ее функция декодирования и вставить одну строку
begin
SizeA := Length(ABC);
Delta := SizeA-Delta; <- вот эту
Result := '';
...

мы программисты народ не спящий да, помогло еще раз выражаю благодарность) в принципе дельфяк прикольный язык, придется немного по-мучатся... но в итоге что-то да получится

Добавлено:

Цитата:
Из постановки задачи ясно, что дельта не может быть больше чем размер алфавита

ну в принципе да. у меня суть программы заключается в том, что бы она могла криптить/декриптить с помощью различных методов. на исходный код по большому счету абсолютно наплевать, так как препод у которого пишу диплом не особо программист... а остальные смотреть все равно не будут

Автор: Hiken
Дата сообщения: 21.09.2009 01:55
andrewtishkin
По вашей ссылке:

Цитата:
Это означает то, что при наличии цифрового удостоверения VeriSign, получение логотипа Compatible with Windows 7 для вашего приложения будет бесплатным.

Внимание: Действует акция Microsoft по компенсации стоимости цифрового удостоверения VeriSign. За дополнительной информацией обращайтесь по адресу isvrus@microsoft.com. Предложение ограничено.

Вы смотрели цены у VeriSign??! И не факт, что Microsoft потом компенсирует большую часть от затраченных средств.


Цитата:
Ну иногда-таки нужно Правда для полноты картины потребуется установить свой сертификат в системное хранилище

Вы приложение для себя пишите?
Автор: V1s1ter
Дата сообщения: 21.09.2009 02:02
Delta RuBoard

Цитата:
в принципе дельфяк прикольный язык, придется немного по-мучатся...

Паскаль как раз хорош для отработки навыков построения алгоритмов, а именно их, судя по Вашим вопросам, пока не достаточно. Но это не проблема - было бы желание. Успехов.
Автор: Hiken
Дата сообщения: 21.09.2009 02:06
Delta RuBoard
Вот я думаю, напугать вас или нет? Как научиться программировать за 10 лет.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.