Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 9
1

Найти центр и радиус окружности

24.11.2018, 11:43. Показов 2550. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заданы 4 точки на плоскости. Определить лежит ли последняя точка внутри окружности, проходящей через первые три точки.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2018, 11:43
Ответы с готовыми решениями:

Даны два множества точек на плоскости. Найти центр и радиус окружности
Даны два множества точек на плоскости. Найти центр и радиус окружности, проходящей через K (K >=3)...

Пределить радиус и центр окружности, проходящей, по крайней мере, через три различные точки
Здравствуйте помогите пожалуйста над задачей бьюсь уже больше 2-х недель а толку 0 :-( Суть...

Считать радиус и выдать на печать диаметр окружности, радиус и площадь
Здравствуйте, уважаемые! Начал изучать язык С и столкнулся с задачей такой. //Напишите программу,...

Найти радиус окружности и площадь круга, ограниченного этой окружностью
Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью. В...

13
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
24.11.2018, 11:48 2
makster231, в чем сложности? Как найти центр и радиус? Но это школьная геометрия и определение окружности. Или в чем-то другом?
0
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 9
24.11.2018, 11:54  [ТС] 3
Это всё нужно сделать через Си
Я искал в интернете, как это реализовать,но ничего не нашёл
Решил сюда написать, может кто-то подкинет идею

Добавлено через 2 минуты
Саму программу смогу написать, но мне нужны формулы
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
24.11.2018, 14:08 4
Лучший ответ Сообщение было отмечено makster231 как решение

Решение

makster231, Берешь 2 точки. А и В. находишь середину отрезка АВ. Через эту середину проводишь прямую, перпендикулярную АВ. Тоже самое делаешь для другой пары точек. Пересечение этих прямых и будет центром окружности.
0
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 9
24.11.2018, 23:04  [ТС] 5
Спасибо большое !!!
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
24.11.2018, 23:54 6
makster231, вот вам тема для размышлений
Пригодилось ли Вам как программисту математическое образование?
И даже если вы ответите "НЕТ", то при вашем отсутствии этого образования вы смогли воспользоваться моим.
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
25.11.2018, 21:22 7
Цитата Сообщение от makster231 Посмотреть сообщение
Определить лежит ли последняя точка внутри окружности, проходящей через первые три точки.
А в заголовке сказано совсем другое: "Найти центр и радиус окружности".

Так что именно надо сделать???
0
Байт
25.11.2018, 21:35
  #8

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так что именно надо сделать???
Имхо, все уже сделано. Или вы думаете иначе?
А по поводу заголовков тем, тут или надо разбираться всерьез, или плюнуть. Частенько модераторы меняют заголовки. И не всегда адекватно. И их можно понять. Тяжко жить в атмосфере бреда. Начинаешь слегка побреживать и сам. Посему, если вам хочется непременно узнать, кто виноват и кого казнить, имейте в виду, что тут есть 2 точки приложения усилий.

0
TheCalligrapher
25.11.2018, 22:47
  #9

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Имхо, все уже сделано. Или вы думаете иначе?
В смысле - сделано?

Задачу о четырех точках можно решить разными способами, во многом существенно более интересными, если и менее оптимальными, чем "наивный" подход с буквальный построением окружности. Без рассмотрения разных вариантов ни о каком "сделано" речи быть не может.

Если же вашим критерием "сделано" является "автор вопроса сдал лабу и, заливаясь радостным смехом, убежал по улице обруч гонять", то... сорри, мне такие критерии неинтересны.

0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
25.11.2018, 22:53 10
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Задачу о четырех точках можно решить разными способами, во многом существенно более интересными,
Если не в лом - покажите.
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
26.11.2018, 11:01 11
Цитата Сообщение от Байт Посмотреть сообщение
Если не в лом - покажите.
Ну, например...

Если точка попадает в области, залитые желтым цветом на первом рисунке, то такая точка заведомо лежит за пределами описанной окружности.



В противном случае, точка лежит "напротив" одной из сторон треугольника в зонах 1, 2 или 3. Тогда можно воспользоваться двумя утверждениями о триангуляции Делоне для набора точек:

1. Триангуляция Делоне <=> минимальный угол среди всех углов треугольников является максимальным среди всех возможных триангуляций на данном наборе точек.
2. Триангуляция Делоне <=> описанная окружность для любого треугольника триангуляции не содержит внутри ни одной точки исходного набора (точки могут присутствовать только на окружности).

Отсюда получаем критерий попадания точки в описанную окружность. Тестовая точка P, лежащая в одной из зон 1, 2 или 3, в совокупности с вершинами треугольника A, B и С образует набор из четырех точек. Этот набор допускает лишь две возможных триангуляции (см. второй рисунок):



1. Триангуляция с исходным треугольником - красная диагональ четырехугольника ABCP)
2. Альтернативная триангуляция - синяя диагональ четырехугольника

Чтобы ответить на вопрос о том, какая из этих двух триангуляций является триангуляцией Делоне, надо вычислить минимальные углы в группах углов 1,4,5,8 и 2,3,6,7, после чего выяснить, какой из минимумов больше.

Если min(∠1,∠4,∠5,∠8) больше, чем min(∠2,∠3,∠6,∠7), то исходный треугольник принадлежит триангуляции Делоне, из чего следует, что точка P лежит за пределами его описывающей окружности. В противном случае - точка лежит внутри.
Миниатюры
Найти центр и радиус окружности   Найти центр и радиус окружности  
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
26.11.2018, 11:12 12
В примере на втором рисунке, кстати, невооруженным глазом видно, что триангуляцией Делоне будет именно триангуляция с исходным треугольником. Что означает, что точка P лежит за пределами описанной окружности.
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
27.11.2018, 06:39 13
C
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdbool.h>
#include <math.h>
#include <stdio.h>
 
#define SWAP(T, a, b) do { T tmp = (a); (a) = (b); (b) = tmp; } while (0)
#define ROL3(T, a) do { T tmp = (a)[0]; (a)[0] = (a)[1]; (a)[1] = (a)[2]; (a)[2] = tmp; } while (0)
#define MIN(a, b) ((a) < (b) ? (a) : (b))
 
typedef struct pnt_t { int x, y; } pnt_t;
 
pnt_t ccw_90(pnt_t p) 
  { return (pnt_t) { -p.y, p.x }; }
 
pnt_t minus(pnt_t a, pnt_t b)
  { return (pnt_t) { a.x - b.x, a.y - b.y }; }
  
double length(pnt_t p)
  { return hypot(p.x, p.y); }
  
int product(pnt_t a, pnt_t b)
  { return a.x * b.x + a.y * b.y; }
 
int side(pnt_t a, pnt_t b, pnt_t p)
{
  int cp = product(ccw_90(minus(b, a)), minus(p, a));
  return (cp > 0) - (cp < 0);
}
 
void make_ccw(pnt_t (*t)[3])
{
  if (side((*t)[0], (*t)[1], (*t)[2]) < 0)
    SWAP(pnt_t, (*t)[0], (*t)[1]);
}
 
double angle_measure(pnt_t a, pnt_t o, pnt_t b)
{
  a = minus(a, o);
  b = minus(b, o);
  return -product(a, b) / (length(a) * length(b));
}
 
double min4(double a, double b, double c, double d)
{
  double ab = MIN(a, b), cd = MIN(c, d);
  return MIN(ab, cd);
}
 
bool test_inside(pnt_t (*t)[3], pnt_t p)
{
  make_ccw(t);
 
  int s[] = { side((*t)[0], (*t)[1], p), side((*t)[1], (*t)[2], p), side((*t)[2], (*t)[0], p) };
  
  unsigned outside = (s[0] < 0) + (s[1] < 0) + (s[2] < 0);
  if (outside != 1)
    return outside == 0;
 
  while (s[0] >= 0)
  {
    ROL3(pnt_t, *t);
    ROL3(int, s);
  }
  
  double 
    min_org = min4(
      angle_measure((*t)[0], (*t)[1], (*t)[2]), angle_measure((*t)[2], (*t)[0], (*t)[1]), 
      angle_measure((*t)[1], (*t)[0], p), angle_measure(p, (*t)[1], (*t)[0])),
    min_alt = min4(
      angle_measure((*t)[1], (*t)[2], p), angle_measure(p, (*t)[2], (*t)[0]), 
      angle_measure((*t)[0], p, (*t)[2]), angle_measure((*t)[2], p, (*t)[1]));
    
  return min_org <= min_alt;
}
 
int main()
{
  printf("%s\n", 
    test_inside(&(pnt_t []) { { 5, 5 }, { 15, 2 }, { 12, 8 } }, (pnt_t) { 8, 10 }) ? "Inside" : "Outside");
  printf("%s\n", 
    test_inside(&(pnt_t []) { { 5, 5 }, { 15, 2 }, { 12, 8 } }, (pnt_t) { 8, 8 }) ? "Inside" : "Outside");
  printf("%s\n", 
    test_inside(&(pnt_t []) { { 5, 5 }, { 15, 2 }, { 12, 8 } }, (pnt_t) { 12, 5 }) ? "Inside" : "Outside");
  printf("%s\n", 
    test_inside(&(pnt_t []) { { 5, 5 }, { 15, 2 }, { 12, 8 } }, (pnt_t) { 18, 0 }) ? "Inside" : "Outside");
}
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
27.11.2018, 07:03 14
Пара тестиков случайными точками... Полный пупсик! Сам удивляюсь.
Миниатюры
Найти центр и радиус окружности   Найти центр и радиус окружности  
0
27.11.2018, 07:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2018, 07:03
Помогаю со студенческими работами здесь

Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью. В качестве значения π использовать 3.14
Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью. В...

Найти центр и радиус окружности
Здравствуйте, объясните, пожалуйста, как делать такое задание: Найти центр и радиус окружности,...

Найти центр M и радиус r окружности
Найти центр M и радиус r окружности, описанной около треугольника с вершинами A=(-2,-2), B=(2,6),...

Найти центр и радиус окружности
Найти центр и радиус окружности 3x2+5+14x=–5y2–y+12. Желательно еще расписать алгоритм решения!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru