Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си [Уравнение прямой?] / 7 сообщений из 7, страница 1 из 1
03.07.2016, 10:21
    #39266920
LimsЯ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
Всем добрый день. столкнулся с проблемой решения с задачей а именно с частью "В" - для решения это задачи мне нужно найти уравнение прямой и проверить её попадает ли в окружности камер? или как то иначе ???

Задание:
На территории имеется N камер, исходные координаты которых (xi, yi), i=0..N-1, радиусы — ri.

б) для точки T(x,y) определить, в области видимости каких камер она находится;
в) Нарушитель следует из точки A(x1; y1) в точку B(x2; y2). Сколько камер его заметят, если они будут стоять неподвижно?

Входные данные:
- число N -количество камер (1<N<=300);
- N строк вида xi, yi, ri.
- координаты точек T(x,y) и A(x1; y1) , B(x2; y2).
Выходные данные:
- первая строка- порядковые номера камер, в области видимости которых находится точка Т;
- вторая строка - количество камер, заметивших нарушителя

Cи (Решение части "Б")
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
#include <stdio.h>
#include <math.h>

	/*Обьявление структур*/
struct camer {
  int n;
  int cX, cY, Ri;
};
struct camer camer;

struct point {
  int x, y, x1, y1, x2, y2;
};
struct point point;

	/*Сообщения*/
  char error1 []="Ошибка: Число N -количество камер должно быть [1<N<=300]\n";
  char id1 []="Введите координаты для всех камер в формате [xi, yi, ri]:\n";
  char id2 []="Введите координаты точек Т,А,В в формате [x,y]:\n";
  char id3 []="Нарушитель с координатами";
  char id4 []=" в области видимости ";
  char id5 []="Входные данные:\n";
  char id6 []="камер не обнаружено.";

	/*Начало программы*/
void main() {
	printf("------------\n[Задача 1.2]\n%s", id5);
	printf("Введите количество камер: ");
	scanf("%d", &camer.n);
	
	if(300>=camer.n<1) {
	  printf("%s", error1);
	}else{

	/*Входные данные*/
  int i;
  int A[camer.n][3];				// Массив для хранения координат и радиуса в формате x,y,r
      printf("%s", id1);
      for(i=0; i<camer.n; i++) {
	  printf("камер №[%d]: ",i+1);
	  scanf("%d%d%d", &A[i][0], &A[i][1], &A[i][2]);
	 }

	printf("%s", id2);
	printf("Введите точку Т: ");
	scanf("%d%d", &point.x, &point.y);
	printf("Введите точку A: ");
	scanf("%d%d", &point.x1, &point.y1);
	printf("Введите точку B: ");
	scanf("%d%d", &point.x2, &point.y2);
	printf("------------\n[Задание Б]\n");
	
	/*Алгоритмы решения*/
  int function=0;
	for(i=0; i<camer.n; i++) {
	  function  = (pow(point.x-A[i][0],2)+pow(point.y-A[i][1],2)); // (x-x0)^2+(y-y0)^2=R^2 где (x0;y0)-это центр окружности,R-это радиус;
	  if(function<=pow(A[i][2],2)) { //по теореме пифагора проверяем чтобы сумма квадратов координат точки была меньше радиуса 
	      printf("%s T(%d,%d)%s[%d] камера\n", id3, point.x, point.y, id4, i+1);
	  }else{
	    if(camer.n==1) {
	      printf("%s\n", id6);
	    }
	  }
	}

	printf("------------\n[Задание В]\n");}
}


...
Рейтинг: 0 / 0
03.07.2016, 11:29
    #39266932
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
LimsЯдля решения это задачи мне нужно найти уравнение прямой и проверить её попадает ли в
окружности камер?

Да, но только как часть решения "нахождение расстояния от точки до прямой", которое, в
свою очередь, часть "нахождения расстояния от точки до отрезка".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.07.2016, 11:34
    #39266934
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
Dimitry SibiryakovДа
А вообще-то - нет. Для нахождения расстояния от точки до отрезка полное уравнение прямой
находить не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.07.2016, 14:25
    #39266979
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
LimsЯ,
вы используете неудачное именование переменных и объектов, поэтому не возникает желания прочитать то, что вы написали(на Си). Почему у точки три пары координат? Или структура point(лучше все таки именовать структуры с большой буквы, Point) обозначает не точку? И т.д. А по существу вашего вопроса, вероятно вам необходимо организовать цикл по всем камерам и по определенной формуле проверить для каждой камеры то, о чем вы пишите выше. Результат просуммировать в счетчик. Формулу вы встретить в любом учебники по линейной алгебре
...
Рейтинг: 0 / 0
03.07.2016, 21:31
    #39267034
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
Это обычная лаба по программированию на тему ГИГМ/Геометрия на плоскости.

Действительно возьмите любую статью на тему "Расстояние от точки до прямой"
и сделайте. Обращаю также внимание на потерю точности. Лучше считать double
особенно в части квадратного корня.
...
Рейтинг: 0 / 0
03.07.2016, 21:52
    #39267036
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
maytonОбращаю также внимание на потерю точности. Лучше считать double особенно в части
квадратного корня.

Квадратный корень тут не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.07.2016, 22:12
    #39267038
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Си [Уравнение прямой?]
Dimitry SibiryakovmaytonОбращаю также внимание на потерю точности. Лучше считать double особенно в части
квадратного корня.

Квадратный корень тут не нужен.

Не путайте автора. Пускай он сделает через расстояние. А потом оптимизирует неравенство без корней.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си [Уравнение прямой?] / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]