Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 12:15   #1
Юлия_ZZZZ
Пользователь
 
Регистрация: 30.04.2010
Сообщений: 13
Лампочка Зачет по Delphi

Некоторое изображение разленно на n количество кусков..после этого эти куски надо перемещать в произвольно порядке + повернуть их на угол 90 градусов.
Помогите пожалуйста!!!
Юлия_ZZZZ вне форума Ответить с цитированием
Старый 03.05.2010, 12:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чем помочь то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2010, 14:08   #3
Юлия_ZZZZ
Пользователь
 
Регистрация: 30.04.2010
Сообщений: 13
По умолчанию

какие использовани функцию и вообще с чего начать программу?
может сможете помочь?
Юлия_ZZZZ вне форума Ответить с цитированием
Старый 05.05.2010, 14:17   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Куски изображения имеют ровные края? То есть это квадраты, прямоугольники?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.05.2010, 12:01   #5
Юлия_ZZZZ
Пользователь
 
Регистрация: 30.04.2010
Сообщений: 13
По умолчанию

неа,края по-разному разрезанны
Юлия_ZZZZ вне форума Ответить с цитированием
Старый 06.05.2010, 14:22   #6
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Как же можно перемешать куски с неровными краями ?
Ты пример приведи. Картинку линиями "разрежь" и выложи сюда.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 07.05.2010, 12:31   #7
Юлия_ZZZZ
Пользователь
 
Регистрация: 30.04.2010
Сообщений: 13
По умолчанию

Вот примерный программный код для разделения на куски изображения:

procedure TMainForm.Splitting(n, m, T: integer);
var x,y,x2,y2 :real;
px,py,px2,py2,k, sinvert1,sinhoriz1,sinvert2,sinhori z2,uborder,dborder,lborder,rborder: longint;
i,j,col:integer;
begin
Canvas.Brush.Color:=clBlack;
Canvas.Pen.Color:=clBlack;
// n:=10;
// m:=10;
// T:=30;
for i := 0 to (n-2) do //рисуем горизонтальные синусоиды
begin
for px:=0 to 600 do
begin
x:=px*Pi/T;
y:=0.1*sin(x);
py:=trunc(round(400/n)*(1-y));
Canvas.Pixels[px,py+round(400/n*i)]:=0;
end;
end;

for j := 0 to (m-2) do //рисуем вертикальные синусоиды
begin
for px:=0 to 400 do
begin
x:=px*Pi/T;
y:=0.1*sin(x);
py:=trunc(round(600/m)*(1-y));
Canvas.Pixels[py+round(600/m*j),px]:=0;
end;
end;


for i:=-1 to (n-2) do //начинаем указывать границы, внутри которых будем выделять пиксели
begin
if i=-1 then //задаем верх-ниж границы будущих деталей
begin
uborder:=0;
dborder:=round((400/n)*(1+0.1));
end
else if i=(n-2) then
begin
dborder:=400;
uborder:=round((400/n)*(1-0.1)+(400/n*(i)));
end
else
begin
uborder:=round((400/n)*(1-0.1)+(400/n*(i)));
dborder:=round((400/n)*(1+0.1)+(400/n*(i+1)));
end;
for j := -1 to (m-2) do //продолжаем задавать ограничивающие синусоиды
begin
if j=-1 then //лев-прав границы деталей
begin
lborder:=0;
rborder:=round((600/m)*(1+0.1));
end
else
if j=(m-2) then
begin
rborder:=600;
lborder:= round((600/m)*(1-0.1)+(600/m*(j)));
end
else
begin
rborder:=round((600/m)*(1+0.1)+(600/m*(j+1)));
lborder:= round((600/m)*(1-0.1)+(600/m*(j)));
end;


with det[i+2,j+2] do
begin
Width:=rborder-lborder;
Height:=dborder-uborder;
top:=uborder;
left:=lborder;
ID.x:=i+2;
ID.y:=j+2;
Show;
Enabled:=true;
OnClick:=click;
DragMode:=dmAutomatic;
end;

for px := lborder to rborder do //собственно выделяем синусоиды, в зависимости от i, j
begin
for py := uborder to dborder do
begin
if i=-1 then
begin
sinhoriz1:=0; //верхняя синусоида: задаем горизонтальную линию
sinhoriz2:=trunc(round(400/n)*(1-0.1*sin(px*Pi/T))+(400/n*(i+1)));
end
else
if i=(n-2) then
begin
sinhoriz2:=400; //нижняя синусоида: для крайней нижней границы
sinhoriz1:=trunc(round(400/n)*(1-0.1*sin(px*Pi/T))+(400/n*i));
end
else
begin
sinhoriz1:=trunc(round(400/n)*(1-0.1*sin(px*Pi/T))+(400/n*i));
sinhoriz2:=trunc(round(400/n)*(1-0.1*sin(px*Pi/T))+(400/n*(i+1)));
end;


if j=-1 then
begin
sinvert1:=0; //прямая для боковых синусоид
sinvert2:=trunc(round(600/m)*(1-0.1*sin(py*Pi/T))+(600/m*(j+1)));
end
else
if j=(m-2) then
begin
sinvert2:=600; //то же для крайней правой позиции
sinvert1:=trunc(round(600/m)*(1-0.1*sin(py*Pi/T))+(600/m*j));
end
else
begin
sinvert1:=trunc(round(600/m)*(1-0.1*sin(py*Pi/T))+(600/m*j));
sinvert2:=trunc(round(600/m)*(1-0.1*sin(py*Pi/T))+(600/m*(j+1)));
end;



if (px>=sinvert1) and (px>lborder) and (px<=sinvert2) and (px<rborder)
and
(py>=sinhoriz1) and (py>=uborder) and (py<dborder) and (py<=sinhoriz2) then
begin
//Canvas.Pixels[px,py]:=clBlue; //закрашиваем пиксели, попавшие между заданными выше линиями (синусоидами)
det[i+2,j+2].Canvas.pixels[px-lborder,py-uborder]:=img.Canvas.Pixels[px,py];
end;

end;
end;
end;
end;



end;




Задание точно звучит так:
сшевание деталей после разрезания и задание им угла поворота(90 градусов)

может сможете что-нибудь подсказать???
Юлия_ZZZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зачет Dante68 Фриланс 13 12.03.2010 21:06
зачет по информатике Neytron Паскаль, Turbo Pascal, PascalABC.NET 12 21.06.2009 12:25
Зачет по практике!!!!!! KORT Свободное общение 39 21.07.2007 00:28