Программа обработки массивов координат точек на языке Си
Краткое сожержание материала:
Размещено на
Задание на курсовую работу
Разработать программу на языке Си, выполняющую следующие действия:
- формирование массива данных;
- расчет расстояний между прямой и заданными точками;
- расчет периметра и площади фигуры, координаты вершин которой определяются координатами четырех произвольных точек;
- расчет координат точки пересечения заданной прямой и произвольной прямой, описываемой уравнением ax+by+c=0.
- сортировку и отображение результатов.
Исходными данными являются:
1. Эскиз чертежа прямой (А) и многоугольника (В).
2. Ограничение R на расстояние между точками массива D и прямой A.
3. Массив координат точек D{(xi,yi)} i=1,n (n>=15), из которых не менее 7-ми точек должны лежать внутри многоугольника B.
В ходе выполнения работы необходимо составить алгоритм и написать программу, позволяющую:
1. Выбрать из массива точек D все точки, лежащие вне многоугольника В, выше прямой А и поместить полученную информацию (номер точки в массиве D, и ее координаты x,y) в новый массив D1.
2. Вычислить расстояние r от каждой точки, входящей в сформированный массив D1, до прямой А. Информацию обо всех точках, для которых выполняется соотношение r>R (R=2), поместить в новый массив D2, включающий в себя следующие поля: номер точки в исходном массиве D; номер точки в массиве D1; координаты x и y; расстояние от точки до прямой r.
3. Упорядочить полученный массив D2 в порядке убывания r.
4. Вывести результаты расчетов (пп. 1-3) в виде таблиц на экран и в файл с заданным при вводе исходных данных именем.
5. Написать функцию, вычисляющую периметр и площадь фигуры, координаты вершин которой определяются координатами четырех точек вводимых с клавиатуры.
6. Написать функцию, определяющую координаты точки пересечения прямой А и произвольной прямой, описываемой уравнением ax+by+c=0. Коэффициенты прямой a,b,c должны вводиться пользователем с клавиатуры.
Разрабатываемая программа должна удовлетворять следующим требованием:
1) ввод исходных данных (массив координат точек) должен осуществляться как из файла с заданным именем, так и с клавиатуры (по выбору пользователя);
2) результаты расчета должны выводиться как в виде таблиц на экран, так и в файл с заданным именем;
3) процедуры расчета расстояний r , выбора точек из массивов, сортировки массива D2 и вывода результатов следует оформить в программе в форме функций пользователя.
1. Постановка задачи и ее математическая модель
Задача |
Модель решения |
|
Получение исходных координат точек из файла с заданным именем или ввод координат точек с клавиатуры (по выбору пользователя) и запись из в массив D. |
Построчное считывание при помощи функции fscanf (требует подключения stdio.h) из указанного файла пар чисел написанных через разделитель( пробел); формат считываемых чисел - вещественное с плавающей запятой; считывание продолжается до тех пор пока функция fscanf не возвратит EOF(End Of File); Или запись вводимых чисел с клавиатуры с помощью функции scanf. Числа записываются в массив как вещественные с плавающей запятой. |
|
Выбор из массива D точек, лежащих внутри многоугольника B: (0;3), (3;13), (13;11),(11;3)) |
Искомые точки должны лежать: Выше прямой y=3 Выше прямой y=4x-41 Ниже прямой y=3.33x-3 Ниже прямой y=-0.2x+13.6 |
|
Выбор из массива D1, полученного на предыдущем этапе, точек, лежащих от прямой на расстоянии меньшем или равном R (уравнение прямой А:y=-0.65x+14, R =3.8 ) Формула расчета r = |a*x0+b*y0+c|/sqrt(a^2 + b^2) |
Рассчитываем r и заносим в отдельное поле массива. (r<=R) |
|
Сортировка массива D2, полученного на предыдущем этапе, по возрастанию r. |
Сортировка методом пузырька. (сравниваются значения поля r) |
|
Сохранение результатов работы программы в файл и вывод на экран (вывод и запись осуществляется в виде таблиц) |
Построчное заполнение указанного файла( а также вывод на экран) элементами массивов, полученных на предыдущих этапах (для каждого из массивов заполняются все необходимые поля: D координаты x и y, для D1 - x, y и номер элемента в массиве D, для D2 x, y, номер элемента в D и D1 и расстояние r до прямой А). Для записи в файл используется функция fprintf, для вывода на экран printf (требуется подключение stdio.h) |
|
Функция, вычисляющая периметр и площадь фигуры, координаты вершин которой вводятся пользователем с клавиатуры. |
При вводе точек есть одна оговорка: координаты точек вводить по часовой и фигура должна быть правильной (выпуклой). После ввода точек, определяем расстояния между этими точками (длины граней фигуры) по формуле r = sqrt((x1-x2)^2 + (y1-y2)^2) Периметр находим, сложив все длины Р = r1 + r2 + r3 +r4; Площадь находим как сумму площадей треугольников, образующих фигуру. S = s1 + s2; s1 и s2 ищем по формуле Герона: s = p*(p-a)*(p-b)(p-c), где p = (a+b+c)/2 - полупериметр данного треугольника. (a, b - расстояние от одной вершины фигуры до другой, с - длина диагонали фигуры, которая находится по той же формуле что и r) |
|
Функция, рассчитывающая координаты пересечения исходной прямой А с прямой, координаты которой вводятся пользователем с клавиатуры. |
Параметрическое уравнение прямой А -0.65 *x +14 - y = 0 (a = -0.65, b = 1, с = 14) Возможны два случая (случаи, которые требуется рассмотреть в задании на курсовую работу): 1. Если угловые коэффициенты a/b равны, то прямые параллельны (или совпадают) и не имеют точку пересечения. При выпадении этого случая, на кран выводится сообщение сообщающее, что прямые параллельны. 2. Точка пересечения находится из решения уравнений: a*x + b*y + c = 0 a1*x + b1*y + с = 0 Точка пересечения: x=(c+14*b)/(0.65*b-a); y=-0.65*x+14;. |
2. Блок - схема алгоритма
массив координата точка программа
3. Тестирование алгоритма сортировки
№ Шага |
№ Блока |
flag |
i |
Массив |
D2[i][4]<D2[i-1][4] |
flag!=1 |
|
2 |
0 |
3 |
1.45 4.68 6.52 |
Да, меняем |
- |
||
3 |
1 |
- |
- |
- |
- |
||
4 |
1 |
2 |
1.45 6.52 4.68 |
Да, меняем |
- |
||
5 |
1 |
- |
- |
- |
- |
||
6 |
1 |
1 |
6.52 1.45 4.68 |
Нет, не меняем |
- |
||
7 |
1 |
- |
- |
- |
Другие файлы:
Одномерные массивы Алгоритмы обработки больших массивов. Алгоритмы обработки данных Лабораторная работа по информатике с методичкой (программа на языке программирования ''Паскаль'' под ДОС) Работа со структурами в языке программирования Си++ Перенос точек на местность |