powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си [Уравнение прямой?]
7 сообщений из 7, страница 1 из 1
Си [Уравнение прямой?]
    #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
Си [Уравнение прямой?]
    #39266932
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LimsЯдля решения это задачи мне нужно найти уравнение прямой и проверить её попадает ли в
окружности камер?

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

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

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

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

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


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