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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2008, 21:32   #1
Vitkov
Новичок
Джуниор
 
Регистрация: 29.09.2008
Сообщений: 1
По умолчанию Разбиение области на прямоугольные элементы

Друзья! Помогите, пожалуйста. Возникла такая задача: необходимо разбить прямолинейную область на конечное число прямоугольных элементов (грубо говоря "нанести" на него сетку), а также пронумеровать узлы этой сетки (произвольным образом) и пронумеровать элементы. И, в добавок, "запомнить" какие номера узлов (координаты) соответствуют какому элементу.
Я не прошу готовых программ... Подскажите, пожалуйста, идею реализации. Спасибо!
Vitkov вне форума Ответить с цитированием
Старый 29.09.2008, 22:48   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если область не прямолинейная, как написано, а прямоугольная, то можно сделать так:
1.Присваиваем номера элементов как в матрице слева направо, сверху вниз.
Номера узлов храним вместе с номерами элементов в двухмерном массиве записей.
type Telem=record;
el:integer;
uz1,uz2,uz3,uz4:integer;
end;
var x:array of Telem;
Тогда, зная номер элемента и размерность матрицы по ширине (n) можно легко найти номера узлов.
Так для элемента x[i,j].el номера узлов будут :
верхний левый x[i,j].uz1=(n+1)*(i-1)+j
верхний правый x[i,j].uz2=(n+1)*(i-1)+j
нижний левый x[i,j].uz3=(n+1)*i+j
нижний правый x[i,j].uz4=(n+1)*i+j+1
Тогда номера элементов и их узлов запишутся так:
for i:=0 to n do //высота
for j:=0 to m do //ширина
begin
x[i,j].el:=n*(i-1)+j;
x[i,j].uz1:=(n+1)*(i-1)+j;
x[i,j].uz2:=(n+1)*(i-1)+j;
x[i,j].uz3:=(n+1)*i+j;
x[i,j].uz4:=(n+1)*i+j+1;
end;
Если не понравится, или ошибки, не пинать. Написал первое, что пришло в голову, как вариант.
P.S.
Если потом нужно найти узлы например при точке №71 вводим это число в какой-нибудь Эдит и пишем:
for i:=1 to n do
for j:=1 to m do
if StrToInt(Edit1.text)=x[i,j].el then
Edit2.text:=Edit2.text+IntToStr(x[i,j].uz1)+' '+IntToStr(x[i,j].uz2)+' '+IntToStr(x[i,j].uz3)+' '+IntToStr(x[i,j].uz4);

Последний раз редактировалось puporev; 29.09.2008 в 23:06.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбиение на части MAcK Общие вопросы .NET 4 18.09.2008 13:56
Разбиение дочернего окна на колонки... HunterMan Win Api 3 03.04.2008 23:19
Разбиение окна на области? HunterMan Win Api 2 03.04.2008 22:18
Разбиение матриц на макроблоки!!! metamfetamin Паскаль, Turbo Pascal, PascalABC.NET 3 02.11.2007 23:33
Случайное разбиение списка на множесво маленьких списков eXa Общие вопросы Delphi 5 15.08.2007 09:23