Постоение регулярной сеточной модели земной поверхности по результатам выполнения топографической съемки местности методом обратных квадратов
Техническое обеспечение автоматизированных информационных систем, современные средства сбора и обработки земельно-кадастровых данных, вычислительной и телекоммуникационной техники. Перечень этапов реализации методов исследования операций и их описание.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.04.2014 |
Размер файла | 931,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
Глава 1
1.1. Этапы построения моделей
1.2. Методы построения 3D моделей местности
1.3. Описание метода обратных квадратов
Глава 2
2.1 Листинг данной программы
2.2 Результат практической реализации алгоритма в данной работе
Глава 3
3.1 Преимущества метода обратных квадратов
Заключение
Список литературы
Введение
Техническое обеспечение автоматизированных информационных систем Государственного земельного кадастра должно базироваться на современных средствах сбора и обработки земельно-кадастровых данных, вычислительной и телекоммуникационной технике. С учетом фактора постоянной модернизации аппаратных средств информационных систем и модификации программных средств необходимым условием функционирования является обеспечение автоматизированной системы инструментом сбора и обработки материалов полевых съемок и данных дистанционного зондирования (аэрокосмической, цифровой и видеосъемок). Таким образом, становится очевидной необходимость введения в курс «Информационные технологии в землеустройстве и земельном кадастре», для специалистов данной квалификации графических программных систем ориентированных на построение трёхмерных геометрических моделей, а также на формирование графической технической документации в соответствии с действующими ГОСТами. В частности, построение 3D модели местности позволяет более наглядно изучить особенности рельефа, прогнозирования перспективных участков для последующих работ.
Глава 1
1.1 Этапы построения моделей
Исследование операций, как инструмент задачи принятия решения, можно рассматривать и как науку, и как искусство. Наука здесь представлена всей мощью математических методов, а искусство -- тем обстоятельством, что успех на всех этапах, предшествующих получению оптимального решения математической модели, в большей степени зависит от творчества и опыта всей команды, занимающейся решением задачи ИО.
На практике реализация методов ИО должна включать следующие этапы. информационная система техническое обеспечение
1. Формализация исходной проблемы.
2. Построение математической модели.
3. Решение модели.
4. Проверка адекватности модели.
5. Реализация решения.
Из всех пяти приведенных этапов только третий, решение модели, достаточно точно определен и наиболее прост для реализации в рамках методики ИО. поскольку действия на этом этапе основываются на точном математической теории. Выполнение остальных этапов в значительной мере является искусством, а не наукой. Поэтому мы не можем точно описать процедуры выполнение * i их этапов.
1. Формализация проблемы начинается с исследования той предметной области, где возникла рассматриваемая проблема. В результате такого исследования должны быть получены следующие три принципиальных элемента решаемой задачи: 1) описание возможных альтернативных решений, 2) определение целевой функции, 3) построение системы ограничений, накладываемых на возможные решения.
2. Построение математической модели означает перевод формализованной задачи, описание которой получено на предыдущем этапе, на четкий язык математических соотношений. Если полученная модель является одной из стандартных математических моделей, таких как модель линейного программирования, то решение обычно достигается путем использования соответствующих существующих алгоритмов. Если же результирующая модель очень сложная и не приводится к какому-либо стандартному типу моделей, то команда ИО может либо упростить модель, либо применить эвристический подход, либо использовать имитационное моделирование. В некоторых случаях комбинация математической, имитационной и эвристической моделей может привести к решению исходной проблемы.
3. Решение модели, -- наиболее простой из всех этапов реализации методов исследования операций, так как здесь используются известные алгоритмы оптимизации. Важным аспектом этого этапа является анализ чувствительности полученного решения. Это подразумевает получение дополнительной информации о поведении "оптимального" решения при изменении некоторых параметров модели. Анализ чувствительности особенно необходим, когда невозможно точно оценить параметры модели. В этом случае важно изучить поведение оптимального решения в окрестности первоначальных оценок значений параметров модели.
4. Проверка адекватности модели предполагает проверку правильности модели, т.е. определения того, соответствует ли поведение модели в определенных ситуациях поведению исходной реальной системы. Но сначала команда аналитиков ИО должна удостовериться, что модель не содержит "сюрпризов". Другими словами, надо убедиться, что решение, полученное в рамках построенной модели, имеет смысл и интуитивно приемлемо. Формальным общепринятым методом проверки адекватности модели является сравнение полученного решения (поведение модели) с известными ранее решениями или поведением реальной системы. Модель считается адекватной, если при определенных начальных условиях ее поведение совпадает с поведением исходной системы при тех же начальных условиях. Конечно, это не гарантирует, что при других начальных условиях поведение модели будет совпадать с поведением реальной системы. В некоторых случаях в силу разных причин невозможно прямое сравнение модели с реальной системой или сравнение решений, полученных в рамках этой модели, с известными решениями (например, из-за отсутствия таких данных). В такой ситуации для проверки адекватности математической модели можно использовать имитационное моделирование, т.е. сравнивать поведение математической и имитационной моделей.
5. Реализация решения подразумевает перевод результатов решения модели в рекомендации, представленные в форме, понятной для лиц, принимающих решения, т.е. заказчиков решения исходной проблемы.
1.2 Методы построения 3D моделей местности
Основой для представления данных о земной поверхности являются цифровые модели рельефа.
Поверхности - это объекты, которые чаще всего представляются значениями высоты Z, распределенными по области, определенной координатами X и Y.
Цифровые модели рельефа (ЦМР) используют для компьютерного представления земных поверхностей.
Построение ЦМР требует определённой формы представления исходных данных (набора координат точек X,Y,Z) и способа их структурного описания, позволяющего восстанавливать поверхность путем интерполяции или аппроксимации исходных данных.
Источники данных для формирования ЦМР
Исходные данные для формирования ЦМР могут быть получены по картам - цифрованием горизонталей, по стереопарам снимков, а также в результате геодезических измерений или лазерного сканирования местности. Наиболее распространен первый способ, т.к. сбор по стереопарам снимков отличается трудоемкостью и требует специфического программного обеспечения, но в то же время позволяет обеспечить желаемую степень детальности представления земной поверхности. Лазерное сканирование перспективный современный метод, пока достаточно дорогой.
Структура данных для представления поверхностей
Построение ЦМР требует определенной структуры данных, а исходные точки могут быть по разному распределены в пространстве. Сбор данных может осуществляться по точкам регулярной сетки, по структурным линиям рельефа или хаотично. Первичные данные с помощью тех или иных операций приводят к одному из наиболее распространенных в ГИС структур для представления поверхностей: GRID, TIN или TGRID.
TIN (Triangulated Irregular Network) - нерегулярная триангуляционная сеть, система неперекрывающихся треугольников. Вершинами треугольников являются исходные опорные точки. Рельеф в этом случае представляется многогранной поверхностью, каждая грань которой описывается либо линейной функцией (полиэдральная модель), либо полиноминальной поверхностью, коэффициенты которой определяются по значениям в вершинах граней треугольников. Для получения модели поверхности нужно соединить пары точек ребрами определенным способом, называемым триангуляцией Делоне (рис. 1).
Триангуляция Делоне в приложении к двумерному пространству формулируется следующим образом: система взаимосвязанных неперекрывающихся треугольников имеет наименьший периметр, если ни одна из вершин не попадает внутрь ни одной из окружностей, описанных вокруг образованных треугольников (рис.2). Образовавшиеся треугольники при такой триангуляции максимально приближаются к равносторонним, а каждая из сторон образовавшихся треугольников из противолежащей вершины видна под максимальным углом из всех возможных точек соответствующей полуплоскости. Интерполяция выполняется по образованным ребрам.
Рис. 2. Триангуляция Делоне
Отличительной особенностью и преимуществом триангуляционной модели является то, что в ней нет преобразований исходных данных. С одной стороны, это не дает использовать такие модели для детального анализа, но с другой стороны, исследователь всегда знает, что в этой модели нет привнесенных ошибок, которыми грешат модели, полученные при использовании других методов интерполяции. Немаловажен и тот факт, что это самый быстрый метод интерполяции. Однако, если в ранних версиях большинства ГИС триангуляционный методы был основной, то сегодня большое распространение получили модели в виде регулярной матрицы значений высот.
GRID - модель, представляет собой регулярную матрицу значений высот, полученную при интерполяции исходных данных. Для каждой ячейки матрицы высота вычисляется на основе интерполяции. Фактически это сетка, размеры которой задаются в соответствии с требованиями точности конкретной решаемой задачи. Регулярная сетка соответствует земной поверхности, а не изображению.
При использовании GRID-модели существует некоторая сложность в выборе интервала между точками. Например, участки поверхности могут быть как сильно пересеченными, так и выположенными. В первом случае необходимо большее количество точек на единицу площади.
Рис. 3. Плотность точек в модели GRID
1.3 Описание метода обратных квадратов и адгоритм его практической реализации
Есть несколько алгоритмов, оперирующих только положением точек и значениями в них. Самый простой из этих способов -- «метод обратных квадратов».
Суть метода заключается в том, что значение в произвольной точке P вычисляется, как линейная комбинация значений заданных точек; причём веса в линейной комбинации берутся обратно пропорциональными квадрату расстояний от этой точки P до соответствующих заданных точек.
Например, даны точки с координатами (X1,Y1), (X2,Y2), ... , (Xn,Yn), имеющие значения F1, ... , Fn соответственно. И есть точка (X, Y), в которой нам необходимо вычислить значение F. Тогда мы вначале вычисляем веса:
Затем нормируем веса так, чтобы их сумма была равна единице:
S := K1+...+Kn;
Ki := Ki / S, i=1,...,n.
Затем вычисляем нужное нам значение, как линейную комбинацию заданных значений с вычисленными весами:
F:=K1•F1+...+Kn•Fn.
Если вдруг так оказалось, что точка (X,Y) совпала с одной из заданных точек, то, чтобы не было деления на ноль, мы просто берем значение совпавшей точки:
F := Fi, если X=Xi и Y=Yi.
Глава 2
2.1 Листинг данной программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, Menus;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button_ApGrig: TButton;
Button_Load: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button_Save: TButton;
Button_Clear: TButton;
SpeedButton1: TSpeedButton;
Button_start: TButton;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
StringGrid2: TStringGrid;
Button1: TButton;
procedure StringGrid1Enter(Sender: TObject);
procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button_ApGrigClick(Sender: TObject);
procedure Button_LoadClick(Sender: TObject);
procedure Button_SaveClick(Sender: TObject);
procedure Button_ClearClick(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure Button_frozenClick(Sender: TObject);
procedure Button_startClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
coordinates=record
x:real;
y:real;
z:real;
ex:boolean;
end;
original=array [1..10000] of coordinates;
var
Form1: TForm1;
m,m1,step,numofint:integer;
editcontrol:boolean;
resultnet:array [1..10000, 1..3] of double;
scale,scale_z:real;
line: array [1..10000,1..6] of real;
o:integer;
implementation
uses Unit2, Unit3, Unit4;
{$R *.dfm}
procedure TForm1.StringGrid1Enter(Sender: TObject);
var n: Integer;
s: string;
begin
StringGrid1.Cells[1,0]:='X';
StringGrid1.Cells[2,0]:='Y';
StringGrid1.Cells[3,0]:='Z';
StringGrid1.Cells[0,0]:='№';
StringGrid1.Cells[0,1]:='1';
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n:integer; s:string;
begin
n:= StringGrid1.RowCount;
if Key = VK_RETURN then begin //adds one more row
if StringGrid1.Cells[3,n-1] <> '' then
begin
//showmessage('');
n:=n+1 ;
StringGrid1.RowCount:=n;
s:=inttostr(n-1);
StringGrid1.Cells[0,n-1] :=s;
StringGrid1.Row:=n-1;
StringGrid1.Col:=1;
end;
end;
if Key = VK_RETURN then begin
if StringGrid1.Cells[1,n-1] <> '' then
begin
StringGrid1.Row:=n-1;
StringGrid1.Col:=2;
end;
end;
if Key = VK_RETURN then begin
if StringGrid1.Cells[2,n-1] <> '' then
begin
StringGrid1.Row:=n-1;
StringGrid1.Col:=3;
end;
end;
end;
procedure TForm1.Button_ApGrigClick(Sender: TObject);
begin
Stringgrid1.Visible:=true;
Button_Save.Visible:=true;
Button_Clear.Visible:=true;
Form1.ClientHeight:=Button_start.Top+40;
if editcontrol=false then
begin
editcontrol:=true; Stringgrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing,goTabs,goAlwaysShowEditor];
Button_ApGrig.Caption:='Готово';
end
else
begin
editcontrol:=false; Stringgrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goTabs,goAlwaysShowEditor];
Button_ApGrig.Caption:='Редактировать';
end;
end;
procedure TForm1.Button_LoadClick(Sender: TObject);
type
coord = record
x:string;
y:string;
z:string;
end;
var f:textfile ; s,str:string; n,i,p:integer; xyz: coord;
begin
openDialog1.Filter :=
'Текстовый файл с разделителем|*.txt';
If OpenDialog1.Execute then
begin
s:=Opendialog1.FileName;
AssignFile(f,s);
Reset(f);
n:=0;
while not eof(f) do
begin
Readln(f,str);
n:=n+1;
StringGrid1.RowCount:=n+1;
trimleft(str);
trimright(str);
p:=pos(' ',str);
xyz.x:=copy(str,1,p) ;
delete (str,1,p);
trimleft(str);
p:=pos(' ',str);
xyz.y:=copy(str,1,p) ;
delete (str,1,p);
trimleft(str);
xyz.z:=str;
//showmessage(xyz.y);
Stringgrid1.Cells[1,n]:=trimright(xyz.x);
Stringgrid1.Cells[2,n]:=trimright(xyz.y);
Stringgrid1.Cells[3,n]:=xyz.z;
end;
StringGrid1.Visible:=true;
Button_Save.Visible:=true;
Button_Clear.Visible:=true;
StringGrid1.Cells[1,0]:='X';
StringGrid1.Cells[2,0]:='Y';
StringGrid1.Cells[3,0]:='Z';
StringGrid1.Cells[0,0]:='№';
for i:=1 to n do
begin
s:=inttostr(i);
StringGrid1.Cells[0,i]:=s;
end;
closefile(f);
Form1.ClientHeight:=423;
Button_ApGrig.Caption:='Редактировать';
editcontrol:=false; Stringgrid1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goTabs,goAlwaysShowEditor];
end;
end;
procedure TForm1.Button_SaveClick(Sender: TObject);
var s,str:string; f:textfile; n,i:integer;
begin
saveDialog1.Filter := 'Текстовый файл с разделителем|*.txt' ;
saveDialog1.DefaultExt := 'txt';
if savedialog1.Execute then
begin
s:=Savedialog1.FileName;
AssignFile (f,s);
Rewrite(f);
n:=StringGrid1.Rowcount;
for i:=1 to n-1 do
begin
str:=StringGrid1.Cells[1,i]+'StringGrid1.Cells[2,i]+' '+StringGrid1.Cells[3,i]+#13;
Writeln (f,str);
end;
CloseFile(f);
Showmessage ('Файл успешно сохранен!')
end;
end;
procedure TForm1.Button_ClearClick(Sender: TObject);
begin
Form2.Showmodal;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
const Digit: set of Char=['1'..'9', '0', #8];
Separator: set of Char=['/', '.', ',', 'б', 'Б', 'ю', 'Ю'];
var i,j:integer;
begin
f (Key in Separator)
then Key:=DecimalSeparator
else
if (not(Key in Digit))
then Key:=#0;
i:=Stringgrid1.Row;
j:=Stringgrid1.Col;
if((Key=DecimalSeparator)and(pos(DecimalSeparator, Stringgrid1.Cells[i,j])<>0))
then Key:=#0;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form3.Showmodal;
end;
procedure TForm1.Button_frozenClick(Sender: TObject);
var row,n,i:integer;
begin
//if editcontrol=1 then begin
// row:=stringgrid1.Row;
// n:=stringgrid1.RowCount;
// for i:=row to n do
// begin
// end;
//end;
end;
procedure TForm1.Button_startClick(Sender: TObject);
var massive:original;
i,n,j,width_n,height_n,t,l,k,min:integer;
maxx,maxy,minx,miny,width,height,buf,bufz,maxz,sump,sumz:real;
aux,aux1:array [1..10000, 1..2] of real;
alert:string[50];
begin
n:=stringgrid1.rowcount-1;
//setlength(massive,n);
//setlength(aux,n);
for i:=1 to n do
begin
try
massive[i].x:=strtofloat(stringgrid1.Cells[1,i]);
massive[i].y:=strtofloat(stringgrid1.Cells[2,i]);
massive[i].z:=strtofloat(stringgrid1.Cells[3,i]);
massive[i].ex:=true;
except
alert:='Точка '+inttostr(i)+' содержит ошибку и будет заморожена.';
showmessage(alert);
massive[i].ex:=false;
stringgrid1.Cells[0,i]:=stringgrid1.Cells[0,i]+'*';
end;
end;
minx:=massive[1].x;
miny:=massive[1].y;
maxx:=massive[1].x;
maxy:=massive[1].y;
for i:=1 to n-1 do
begin
if massive[i].x < minx then minx:=massive[i].x;
if massive[i].y < miny then miny:=massive[i].y;
if massive[i].x > maxx then maxx:=massive[i].x;
if massive[i].y > maxy then maxy:=massive[i].y;
end;
step:=strtoint(Form3.Edit_step.Text);
width:=0;
width_n:=1;
height:=0;
height_n:=1;
while width < (maxy-miny) do
begin
width:=width+step;
width_n:=width_n+1;
end;
while height < (maxx-minx) do
begin
height:=height+step;
height_n:=height_n+1;
end;
numofint:=strtoint(Form3.Edit_NearNeib.Text);
if n < numofint then numofint:=n;
//setlength(aux1,numofint);
t:=1;
//showmessage(inttostr(width_n));
for j:=1 to height_n do begin
i:=t;
Repeat
resultnet[i,1]:=minx+(j-1)*step;
resultnet[i,2]:=miny+(i-t)*step;
i:=i+1;
Until i>j*width_n;
t:=t+width_n;
end;{for j:=1 to height_n}
for i:=1 to t do //
begin
for j:=1 to n do
begin
aux[j,1]:=sqrt((massive[j].x-resultnet[i,1])*(massive[j].x-resultnet[i,1])+(massive[j].y-resultnet[i,2])*(massive[j].y-resultnet[i,2]));
aux[j,2]:=massive[j].z;
end;//auxillary massive formed, contains minimal distances and Z's
for j:=1 to n do begin
k:=j;
while aux[k,1]>aux[k-1,1] do begin
buf:=aux[k,1];
aux[k,1]:=aux[k-1,1];
aux[k-1,1]:=buf;
bufz:=aux[k,2];
aux[k,2]:=aux[k-1,2];
aux[k-1,2]:=bufz;
end;
end;
if aux[1,1]=0 then resultnet[i,3]:=aux[1,2]
else
begin
for j:=1 to numofint do
begin
sump:=sump+(aux[j,1]*aux[j,2]);
sumz:=sumz+aux[j,1];
end;
resultnet[i,3]:=(sump/sumz);
end;
sump:=0;
sumz:=0;
end;
Stringgrid2.Rowcount:=t;
for i:=1 to t-1 do
begin
Stringgrid2.Cells[1,i]:=floattostr(resultnet[i,1]);
Stringgrid2.Cells[2,i]:=floattostr(resultnet[i,2]);
Stringgrid2.Cells[3,i]:=floattostr(resultnet[i,3]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
setka: array [1..10000,1..3] of real;
min_x,max_x,min_y,max_y,min_z,max_z,mid_x,mid_y,mid_z:real;
razmer:integer;
i,p,j:integer;
begin
for i:=1 to (StringGrid2.RowCount-1) do //читаю значения из таблицы
begin
setka[i,1]:=strtofloat(StringGrid2.Cells[1,i]);
setka[i,2]:=strtofloat(StringGrid2.Cells[2,i]);
setka[i,3]:=strtofloat(StringGrid2.Cells[3,i]);
razmer:=i;
end;
min_x:=setka[1,1]; //поиск среднего значения координат, необходимо бут при прорисовке
max_x:=setka[1,1];
min_y:=setka[1,2];
max_y:=setka[1,2];
min_z:=setka[1,3];
max_z:=setka[1,3];
for i:=2 to razmer do
begin
if setka[i,1]<min_x then min_x:=setka[i,1];
if setka[i,1]>max_x then max_x:=setka[i,1];
if setka[i,2]<min_y then min_y:=setka[i,2];
if setka[i,2]>max_y then max_y:=setka[i,2];
if setka[i,3]<min_z then min_z:=setka[i,3];
if setka[i,3]>max_z then max_z:=setka[i,3];
end;
mid_x:=(max_x+min_x)/2;
mid_y:=(max_y+min_y)/2;
mid_z:=(max_z+min_z)/2;
if (abs(max_x-mid_x))>(abs(max_y-mid_y)) //определение масштаба при прорисовке
then scale:=abs(max_x-mid_x)
else scale:=abs(max_y-mid_y);
scale_z:=abs(max_z-mid_z)*5;
p:=1;
for i:=1 to razmer do
for j:=1 to razmer do
begin
if ((sqrt(sqr(setka[i,1]-setka[j,1])+sqr(setka[i,2]-setka[j,2])))<=(step+0.001)) then
begin
line[p,1]:=setka[i,1]-mid_x;
line[p,2]:=setka[i,2]-mid_y;
line[p,3]:=setka[i,3]-mid_z;
line[p,4]:=setka[j,1]-mid_x;
line[p,5]:=setka[j,2]-mid_y;
line[p,6]:=setka[j,3]-mid_z;
p:=p+1;
o:=p-1;
end;
end;
Application.CreateForm(TForm4, Form4);
Form4.Show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to form1.stringgrid1.rowcount-1 do
begin
Form1.Stringgrid1.Cells[1,i]:='';
Form1.Stringgrid1.Cells[2,i]:='';
Form1.Stringgrid1.Cells[3,i]:='';
end;
Form1.Stringgrid1.Rowcount:=2;
Close;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Label1: TLabel;
CheckBox1: TCheckBox;
Edit_NearNeib: TEdit;
Label2: TLabel;
Edit_step: TEdit;
Button_SaveSettng: TButton;
Button_Cancel: TButton;
procedure Button_CancelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button_CancelClick(Sender: TObject);
begin
Close;
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,OpenGL, StdCtrls, Spin, ComCtrls, Buttons;
type
TForm4 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
dc : HDC;
hrc: HGLRC;
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
u,ox,oy,oz:integer;
procedure setdcpixelformat(hdc:hdc);
implementation
uses Unit2, Unit1, Unit3;
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
begin
dc := GetDC (Form4.Panel1.Handle);
SetDCPixelFormat(dc);
hrc := wglCreateContext(dc);
u:=0;
ox:=0;
oy:=0;
oz:=0;
end;
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPIXELFORMATDESCRIPTOR;
nPixelFormat : Integer;
begin
FillChar(pfd, SizeOf(pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
procedure TForm4.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;
procedure TForm4.FormPaint(Sender: TObject);
var
ps : TPaintStruct;
i:integer;
begin
BeginPaint (form4.panel1.Handle, ps);
wglMakeCurrent(dc, hrc);
glViewPort (0, 0, form4.panel1.ClientWidth, form4.panel1.ClientHeight);
glClearColor (0.9, 0.9, 0.9, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glRotatef (u, ox, oy, oz);
glBegin (GL_LINES);
glColor3f (0.0, 1.0, 0.0);
glVertex3f (0,0,0);
glVertex3f (1,0,0);
glColor3f (1.0, 0.0, 0.0);
glVertex3f (0,0,0);
glVertex3f (0,1,0);
glColor3f (0.0, 0.0, 1.0);
glVertex3f (0,0,0);
glVertex3f (0,0,1);
glEnd;
glColor3f (0.0, 0.0, 0.0);
glScalef (1/(sqrt(2)*scale),1/(sqrt(2)*scale),1/(sqrt(2)*scale_z));
for i:=1 to o do
begin
glBegin (GL_LINES);
glVertex3f (line[i,2],line[i,1],line[i,3]);
glVertex3f (line[i,5],line[i,4],line[i,6]);
glEnd;
end;
glScalef (sqrt(2)*scale,sqrt(2)*scale,sqrt(2)*scale_z);
SwapBuffers(form4.panel1.Handle);
wglMakeCurrent(0, 0);
EndPaint (form4.panel1.Handle, ps);
end;
procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=38) then
begin
u:=-1;
ox:=1;
oy:=0;
oz:=0;
Form4.FormPaint(Form4);
end;
if (Key=40) then
begin
u:=1;
ox:=1;
oy:=0;
oz:=0;
Form4.FormPaint(Form4);
end;
if (Key=37) and (HiWord(GetKeyState(VK_Shift))<>0) then
begin
u:=1;
ox:=0;
oy:=1;
oz:=0;
Form4.FormPaint(Form4);
end;
if (Key=39) and (HiWord(GetKeyState(VK_Shift))<>0) then
begin
u:=-1;
ox:=0;
oy:=1;
oz:=0;
Form4.FormPaint(Form4);
end;
if (Key=37) and (HiWord(GetKeyState(VK_Shift))=0) then
begin
u:=1;
ox:=0;
oy:=0;
oz:=1;
Form4.FormPaint(Form4);
end;
if (Key=39) and (HiWord(GetKeyState(VK_Shift))=0) then
begin
u:=-1;
ox:=0;
oy:=0;
oz:=1;
Form4.FormPaint(Form4);
end;
end;
end.
2.2 Результат практической реализации описанного алгоритма в данной работе
Программа содержит в себе 4 Form.Каждая из них содержит в себе определенные команды и функции.
На Form 1 были подключены такие команды как: Открыть из файла, Сохранить файл, Редактирование, Обработать - в соответствии с шагом оно составляет сетку квадратов, по заданным значениям координат для каждого узла сетки интерполирует отметку и результаты записывает в таблицу
На Form 2 была подключена команда Очистить. Когда требуется выполнить данную команду, тогда появляется служебное сообщение (см.рис.2):
Рис.2-Вид служебного сообщения
На Form 3 было расположено и настроено меню Настройки, которое дает возможность задать количество ближайших соседей, Шаг сетки, включить или отключить команду Нахождения грубых ошибок в исходных данных, а также сохранить выполненные настройки. (см. рис.3).
Рис.3-вид меню Настройки
На Form 4 находится сама панель, в которой и будет находиться же отрисованная 3D модель местности по заданным точкам.(см.рис.4)
Рис.4-Панель отрисовки 3D модели.
2.3 Апробация данного алгоритма
Апробация заключается в сравнении графических результатов реализации алгоритма в среде программирования Delphi 7 и программе Surfer. Этот этап является проверкой правильности данного алгоритма. Если результаты получены в двух программах будут одинаковые, то можно сделать вывод о том, что алгоритм, описанный в данной работе, верен и правильно выполняет поставленную перед ним задачу. Результаты апробации -рис.2.3.1 и 2.3.2
Рис.2.3.1-результат, полученный в программе Surfer.
Рис.2.3.2.-результат, полученный в программной среде Delphi 7
Глава 3
3.1 Преимущества и недостатки метода обратных квадратов по сравнению с другими методами
1) Метод обратных квадратов строит по точкам непрерывно дифференцируемую (гладкую) функцию, метод триангуляции строит лишь непрерывную (с «изломами» на рёбрах) функцию.
2) 2) При малом количестве вычисляемых точек метод обратных квадратов быстрее, при большом количестве вычисляемых точек (когда вычисляемых точек много больше, чем n•ln(n)), выигрывает оптимальная реализация, использующая триангуляцию Делоне.
3) 3) Метод обратных квадратов устойчив: при малом изменении координат исходных точек (по сравнению с расстояниями между ними) будет происходить малое изменение результирующей функции; метод триангуляции неустойчив: малое изменение координат может привести к перестройке триангуляции и значительным (но локальным) изменениям построенной интерполяционной поверхности.
4) 4) Метод триангуляции локален: это означает, что локальное изменение значений точек или их положения приведёт к локальной перестройке поверхности; метод обратных квадратов не локален: изменение исходных данных приводит к перестройке всей интерполяционной поверхности.
Заключение
На сегодняшний день во многих областях деятельности человека востребованы трехмерные модели реальных объектов. 3D моделирование необходимо при проектировании, архитектуре, дизайне, а также в спелеологии. Трехмерные модели обладают высоким уровнем интерактивности и реалистичности, помогают представить планируемый объект в полном объеме. Построение 3D модели местности позволяет наглядно изучать особенности рельефа при прогнозировании спелеологами перспективных участков для последующих полевых работ.
Размещено на Allbest.ru
...Подобные документы
Эволюция технического обеспечения. Основные требования, применение и характеристики современных технических средств автоматизированных информационных систем. Комплексные технологии обработки и хранения информации. Создание базы данных учета и продажи.
курсовая работа [127,1 K], добавлен 01.12.2010Характеристика сущности и назначения автоматизированных информационных систем (АИС), под которыми понимают совокупность информационных массивов технических, программных и языковых средств, предназначенных для сбора, хранения, поиска, обработки данных.
контрольная работа [24,4 K], добавлен 29.08.2010Техническое обеспечение и его состав. Организационные формы использования технических средств. Факторы, влияющие на выбор настольных ПК для решения экономических задач. Виды информационных технологий в экономике. Технология формирования документов.
реферат [47,5 K], добавлен 07.12.2011Система методов и способов сбора, накопления, хранения, поиска и обработки информации на основе применения средств вычислительной техники. Телепроекты, телеконференции, дистанционное обучение. Системы компьютерной графики (компьютерных презентаций).
реферат [37,7 K], добавлен 26.01.2015Использование информационных технологий управления, поддержки и принятия решений, экспертных систем и обработки данных. Автоматизация бухгалтерии на примере ООО "Уралконфи": универсальная бухгалтерская программа "1С: Бухгалтерия" и ее основные функции.
курсовая работа [1,9 M], добавлен 26.03.2012Разработка программы для автоматизации рабочего места сотрудника кадровой службы, реализующей ввод, корректировку, хранение информации о работниках, званиях, должностях, окладе, а также вывод отчетов о сотрудниках. Проектирование модели базы данных.
отчет по практике [1,5 M], добавлен 07.08.2013Развитие информационных систем. Современный рынок финансово-экономического прикладного программного обеспечения. Преимущества и недостатки внедрения автоматизированных информационных систем. Методы проектирования автоматизированных информационных систем.
дипломная работа [1,5 M], добавлен 22.11.2015Методы организации процесса обработки информации; основные направления реализации внутримашинного информационного обеспечения. Принципы построения и эффективного применения технологий баз и банков данных как основных компонентов автоматизированных систем.
дипломная работа [186,8 K], добавлен 30.05.2013Создание системы сбора пространственных и атрибутивных данных как один из важнейших этапов ведения кадастрового учета. Требования к информационной системе, исходная информация по кадастровому учету объектов недвижимости. Необходимые программные средства.
курсовая работа [4,5 M], добавлен 17.07.2013Определения теории баз данных (БД). Элементы приложения информационных систем. Реляционные модели данных. Задача систем управления распределенными базами данных. Средства параллельной обработки запросов. Использование БД при проведении инвентаризации.
курсовая работа [518,9 K], добавлен 01.05.2015Жизненный цикл автоматизированных информационных систем. Основы методологии проектирования автоматизированных систем на основе CASE-технологий. Фаза анализа и планирования, построения и внедрения автоматизированной системы. Каскадная и спиральная модель.
курсовая работа [1,1 M], добавлен 20.11.2010Использование средств вычислительной техники в информационных системах. Программно-аппаратные средства, обеспечивающие сбор, обработку и выдачу информации. Модели данных - списки (таблицы), реляционные базы данных, иерархические и сетевые структуры.
реферат [105,1 K], добавлен 08.11.2010Техническое обеспечение, расчет информационно-измерительного канала системы автоматического управления. Методическое обеспечение: описание модели АЦП, спектральный анализ на основе преобразования Фурье. Разработка прикладного программного обеспечения.
курсовая работа [501,2 K], добавлен 21.05.2010Общая технико-экономическая характеристика образовательного учреждения СПО Московской области Колледж "Угреша". Описание парка вычислительной техники и структуры локальной сети Колледжа "Угреша". Исследование информационных технологий и систем колледжа.
отчет по практике [445,4 K], добавлен 07.08.2012Современные системы обработки данных. Автоматизированная информационная система. Понятие информационной и динамической модели. Появление множества разнотипных систем, отличающихся принципами построения и заложенными в них правилами обработки информации.
презентация [36,0 K], добавлен 14.10.2013Разработка алгоритма аппроксимации данных методом наименьших квадратов. Средства реализации, среда программирования Delphi. Физическая модель. Алгоритм решения. Графическое представление результатов. Коэффициенты полинома (обратный ход метода Гаусса).
курсовая работа [473,6 K], добавлен 09.02.2015Характеристика систем технического и профилактического обслуживания средств вычислительной техники. Диагностические программы операционных систем. Взаимосвязь систем автоматизированного контроля. Защита компьютера от внешних неблагоприятных воздействий.
реферат [24,4 K], добавлен 25.03.2015Методы и средства защиты информационных данных. Защита от несанкционированного доступа к информации. Особенности защиты компьютерных систем методами криптографии. Критерии оценки безопасности информационных компьютерных технологий в европейских странах.
контрольная работа [40,2 K], добавлен 06.08.2010Виды обеспечения автоматизированных информационных систем. Составление технического задания, разработка информационной системы, составление руководства пользователя к программе. Средства программирования распределенных систем обработки информации.
отчет по практике [1,1 M], добавлен 16.04.2017Термины "логический" и "физический" как отражение различия аспектов представления данных. Методы доступа к записям в файлах. Структура систем управления базами данных. Отличительные особенности обработки данных, характерные для файловых систем и СУБД.
лекция [169,7 K], добавлен 19.08.2013