Курсовая работа: Создание программы для определения вершин пирамиды с выпуклым основанием по данным точкам
1
Procedure
VECTMult(a,b:Coordinates;var c:Coordinates);
2Назначение: производит
векторное перемножение вектора а и b и заносит результат в вектор с ;
3Входные параметры: а,b,c ;
4Выходные параметры: c.
7.Спецификация процедуры collinearity;
1) Function collinearity(a,b:Coordinates):boolean;
2Назначение: возвращает collinearity:=истина , если векторы а и b коллинеарные, иначе- collinearity:=ложь ;
3Входные параметры: a,b;
4Выходные параметры: -.
5 возврат : collinearity
9.Спецификация процедуры MixeMult;
1) Function MixeMult(a,b,c:Coordinates):real
2Назначение: возвращает MixeMult:= значение смешанного произведения
векторов а и b
3Входные параметры: a,b;
4Выходные параметры: -.
5Возврат : MixeMult
10.Спецификация процедуры
coplanarity;
1) Function coplanarity(a,b,c:Coordinates):boolean
2Назначение: возвращает coplanarity :=истина ,если векторы а,b и c компланарны,иначе- coplanarity :=ложь .
3Входные параметры: a,b,c;
4Выходные параметры: -.
Спецификация подпрограмм
для определения вершин пирамиды
1.Спецификация процедуры ploskost
1) Procedure
ploskost(a,b,c:coordinates;var ax,bx,cx,dx:real);;
2)
Назначение: Строит
по 3-м точкам уравнение плоскости вида Ax+By+Cz+D=0 и заносит в ax,bx,cx,dx соответствующие
коэффициенты
3)
Входные
параметры:a,b,c,ax,bx,cx,dx;
4)
Выходные
параметры: ax,bx,cx,dx.
2.Спецификация функции proverka_na_ploskost;
1) function proverka_na_ploskost(var
P:P_descriptor;var mno:mnoj; n:byte):boolean;;
2)
Назначение: проверяет
условие принадлежности n точек(указатели которых
хранятся в множестве mno) к
плоскости ,построенной с помощью процедуры ploskost,возращает значение истины в случае
удачной проверки, иначе-ложь;
3)
Входные
параметры: P,mno,n;
4)
Выходные
параметры: P,mno.
5)
Возврат : f
3.Спецификация функции Vypuklost;
1) Function Vypuklost(var
P:P_descriptor;mno:mnoj;n:byte):boolean;;
2) Назначение: Проверяет многоугольник
на выпуклость, путем перебора n точек из
множества mno ,формированием их в векторы и последующим
векторным перемножением . Возвращает значение истины, если при все N точках знак векторного умножения сохраняется,
иначе -ложь;
3)
Входные
параметры: P,mno,n;
4)
Выходные
параметры: P.
5)
Возврат : Q
4.Спецификация функции FinDaPyramid;
1) Procedure
FinDaPyramid(var P:P_descriptor;mno:mnoj);
2) Назначение: определяет вершины
пирамиды с выпуклым основанием и выводит на дисплей, если же нет решений -выводит
соотсветсвующее сообщение ;
3)
Входные
параметры: P,mno,n;
4)
Выходные
параметры: P,mno.
Блок-схема

Тестовые
Данные
-Введем 5
точек
Точка
1(2,-1,-1)
Точка 2(1, 2,
3)
Точка 3(4, 1 1)
Точка 4(0, 1,
2)
Точка 5(7, 1,
1)
-Построим по
3-м точкам уравнение плоскости
Уравнение каждой плоскости имеет вид: Ax + By
+ Cz + D = 0. Так что наша задача по заданным координатам 3-ех точек
плоскости найти коэффициенты A,
B, C и D. Эти коэффициенты находятся по формулам:

где x, y, z - координаты наших точек, а 1-2-3 это номера точек A-B-C.
Соответственно находим эти коэффициенты и подставляем их в формулу
--В итоге,
получаем уравнение вида Ax + By
+ Cz + D = 0.
A = -2
B = 10
C = -8
- D = -6
Подставим
коэффициенты. Уравнение плоскости:
-2 x + 10 y -
8 z + 6 = 0
Далее,
проверим 4 и 5 точку на принадлежность к этой плоскости:
Берем точку 4(0, 1, 2) и подставляем в
уравнение -2 x + 10 y - 8
z + 6 = 0
-2(0)+10(1)-8(2)+6=0
0=0
Точка 4 принадлежит
плоскости.
Берем точку 5(7, 1, 1) и подставляем в
уравнение -2 x + 10 y - 8
z + 6 = 0
-2(7)+10(1)-8(1)+6=0
-6<>0
Точка 5 не
лежит в плоскости.
-Далее
проверим многоугольник на выпуклость.
Одним из
критериев выпуклости является следующее. Многоугольник будет выпуклым, если для
векторов, составляющих его периметр, выполняется условие: векторные
произведение соседних векторов должны иметь одинаковый знак.

После
последовательного выполнения векторного произведения, видим, что многоугольник
выпуклый следовательно, данные 5 точек являются вершинами пирамиды с выпуклым
основанием, вершины пирамиды:
(2,-1,-1)
(1, 2, 3)
(4, 1, 1)
(0, 1, 2)
(7, 1, 1)
(интерфейс
программы)

(ввод точек)

(вычисление вершин
пирамиды с выпуклым основанием и вывод их на дисплей)

Заключение
пирамида вершина
подпрограмма вектор
В курсовом проекте было
предусмотрено следующее:
• создание библиотеки для
работы с векторами в пространстве ;
• определение вершин пирамиды
в с выпуклым основанием;
Список используемой литературы
1)
Брусенцева В.С. Конспект
лекций по программированию
2)
Фаронов В. С. Turbo Pascal. Начальный курс. Учебное пособие. -
М.: Нолидж»,1998 – 616 с.
3)
Привалов И.И
.Аналитическая геометрия. Учебник издательство «Лань» -304с .
4)
Соболь Б.В.
Практикум по высшей математике. издательство Ростов. 2006-640с
Приложение
Текст программ
Модуль MyUnit;
Unit
MyUnitVector;
interface
Const
{константы ошибок}
ListOk=0;
ListNotMem=1;
ListUnder=2;
ListEnd=3;
Type
mnoj=set
of byte;
{Определение
типов}
Coordinates=record
{коориднаты}
x,y,z:real;
end;
P_Points=^point; {Описание
типа Points}
point=record
data:Coordinates;
Next:P_Points;
end;
P_Descriptor=record {Дескриптор для работы со списком точек}
Start,Ptr:P_Points;
Number:Word;
end;
P_Vectors=^Vector;
{Описание типа Vector}
Vector=record
data:Coordinates;
Next:P_Vectors;
end;
V_Descriptor=record {Дескриптор для работы со списком векторов}
V_Start,V_Ptr:P_Vectors;
V_Number:Word;
end;
Var
ListError:0..3;
mno:mnoj;
{подпрограммы
для формирования списка хранения и обработки списка векторов}
Procedure
InitListOfVectors(var V:V_Descriptor);
Procedure
PutVector(var V:V_Descriptor;c:Coordinates);
procedure
CreateVector (a,b:Coordinates;var c:Coordinates);
Procedure
WriteVectors(var V:V_Descriptor);
Procedure
BeginOfVectors(var V:V_Descriptor);
{Подрограммы
для работы с векторами}
Procedure
AdditionVectors(a,b:Coordinates;var c:Coordinates);
Procedure
MultOnNumber (Number:real; a:Coordinates;var c:Coordinates);
Function
lengthOfVector(a:Coordinates):real;
Function
Scalar(a,b:Coordinates):real;
Function
angle(a,b:coordinates):real;
Function
projection(a,b:coordinates):real;
Procedure
VECTMult(a,b:Coordinates;var c:Coordinates);
Function
collinearity(a,b:Coordinates):boolean;
Function
MixeMult(a,b,c:Coordinates):real;
Function
coplanarity(a,b,c:Coordinates):boolean;
{Подпрограммы
для нахождения пирамиды в пространстве}
Procedure
FinDaPyramid(var P:P_descriptor;mno:mnoj);
Procedure
ploskost(var P:P_descriptor;a,b,c:coordinates;var ax,bx,cx,dx:real);
function
proverka_na_ploskost(var P:P_descriptor;var mno:mnoj; n:byte):boolean;
Function
Vypuklost(var P:P_descriptor;mno:mnoj;n:byte):boolean;
function
Sign(T:real):byte;
{подпрограмм
для формирования списка хранения и обработки точек}
Procedure
InitListOfPoint(var P:P_Descriptor);
Procedure
PutPoint(var P:P_Descriptor);
Procedure
WritePoints(var P:P_Descriptor);
Страницы: 1, 2, 3, 4, 5 |