zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,040
1

задачка попалась, не пойм у условия не полные?

20.12.2013, 10:28. Показов 476. Ответов 3
Метки нет (Все метки)

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

помогаю тут одному товарисчу, естественно условия он и сам до конца не знает, так вот, сложилось ощущение, что задача в такой постановке решение имеет через раз, т.е. нету условий, которым должны удовлетворять эти множества, ни кол-во точек...

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

Не по теме:

есть хочу ппц :(((

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2013, 10:28
Ответы с готовыми решениями:

Интересная програмка попалась
Доброго времени суток!!! У меня такая проблемка нужно решить задачку но ничего в голову не лезет....

попалась Altera deo-nano
http://www.altera.com/education/univ/materials/boards/de0-nano/unv-de0-nano-board.html вот такая....

Программа на курсовой попалась очень сложная, выручайте люди добрые
Сумма долга 000177 Требуется определить современное значение долга, дисконтированную его сумму,...

Внутри проверки условия не производится ещё одна проверка условия
Как задумывалось - при нажатии на джойстик просто должны были остановится движки, но если при...

3
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.12.2013, 11:09 2
Даны два множества точек на плоскости. Найти радиус и центр окружности, проходящей через n(n>=3) точек первого множества и содержащей строго внутри себя равное число точек первого и второго множества.
задачка попалась, не пойм у  условия не полные?
  • Два множества точек: черные кружочки и фиолетовые крестики (если вдруг у кого монохромные дисплеи).
  • Допустим первое множество это черные точки.
  • Вводится n - количество точек, которые должны быть внутри окружности (в данном случае (на рисунке) три).
  • Каким-то образом перебираются окружности - этот алгоритм вам и нужно придумать. В данном случае тройками перебираются все точки первого множества и строится по ним окружность.
  • Будем считать (нужно уточнить), что точки, лежащие на самой окружности, принадлежат этой окружности, точнее удовлетворяют нашему условию.
  • Окружность номер 1 содержит в себе три точки первого множества, но только одну второго. Она не подходит, так как должно быть поровну. Не обязательно n (три)!
  • Окружность номер 2 содержит в себе четыре точки из первого множества, но только две из второго. Она не подходит.
  • Окружность номер 3 содержит три точки из первого множества и три точки из второго. Она и является исходной. (По условию задачи не понятно надо ли продолжать поиски далее, но скорее всего надо остановиться на первой нашедшейся)
  • В найденной окружности ищем центр и радиус.
1
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,040
20.12.2013, 16:25  [ТС] 3
Ну да, примерно так я и думал, но спасибо, так намного нагляднее задачка

Добавлено через 5 часов 6 минут
дико решил не без извращений
мб кому потом пригодится когди-нибудь

очень лень её доводить до ума, но условия выполяет
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
 
bool dozor(double x, double y,double x0,double y0,double r)
{
if (sqrt(pow(abs(x-x0),2)+pow(abs(y-y0),2))<=r)
return true;
 
else
return false;
}
 
int main()
{
srand(time(0));
const int size=20;
double x[size];
double y[size];
double xx[size];
double yy[size];
 
int sizeFindEnd;
int sizeFindStart;
cout<<"Please enter range find:\nstart:";
cin>>sizeFindStart;
cout<<"end:";
cin>>sizeFindEnd;
    for (int i=0;i<size;i++)
    {
    x[i]=0+rand()%15;
    y[i]=0+rand()%15;
    xx[i]=0+rand()%15;
    yy[i]=0+rand()%15;
    }
cout<<"x:";
    for (int i=0;i<size;i++)
    cout<<x[i]<<" ";
 
cout<<"\ny:";
    for (int i=0;i<size;i++)
    cout<<y[i]<<" ";
cout<<endl;
for (int i=0;i<size;i++)
    for (int j=i;j<size;j++)
        for (int l=j;l<size;l++)
            for (double y0=0;y0<=sizeFindEnd;y0++)
                for (double x0=0;x0<=sizeFindEnd;x0++)
if (
 ((pow(abs(x[i]-x0),2)+pow(abs(y[i]-y0),2))==(pow(abs(x[j]-x0),2)+pow(abs(y[j]-y0),2)))&&
 ((pow(abs(x[j]-x0),2)+pow(abs(y[j]-y0),2))==(pow(abs(x[l]-x0),2)+pow(abs(y[l]-y0),2)))&&
 (x[i]!=x[l])&&(x[l]!=x[j])&&(x[i]!=x[j])
    )
 
{
    double r=sqrt(pow(abs(x[l]-x0),2)+pow(abs(y[l]-y0),2));
    cout<<"\n\nThis around may bee created:";
    cout<<"\nx0 = "<<x0<<"    y0 = "<<y0<<endl;
    cout<<"Radius : "<<r<<endl;
    cout<<"x1: "<<x[i]<<"   y1:"<<y[i]<<"           r^2 for 1:"<<(pow(abs(x[i]-x0),2)+pow(abs(y[i]-y0),2))<<endl;
    cout<<"x2: "<<x[j]<<"   y2:"<<y[j]<<"           r^2 for 2:"<<(pow(abs(x[j]-x0),2)+pow(abs(y[j]-y0),2))<<endl;
    cout<<"x3: "<<x[l]<<"   y3:"<<y[l]<<"           r^2 for 3:"<<(pow(abs(x[l]-x0),2)+pow(abs(y[l]-y0),2))<<endl;
    int counter1=0;
    int counter2=0;
        for (int z=0;z<size;z++)
    if (dozor(x[z],y[z],x0,y0,r))
        counter1++;
        for (int z=0;z<size;z++)
    if (dozor(xx[z],yy[z],x0,y0,r))
        counter2++;
 
    if (counter1==counter2)
        {
        char ready='0';
        cout<<"\n\nThis around have :"<<counter1<<" elments of array\n";
        cout<<"Do you wont see array? y/n:";
        cin>>ready;
            if (ready=='y')
            {
                cout<<"x:";
                for (int i=0;i<size;i++)
                cout<<x[i]<<" ";
                cout<<"\ny:";
                for (int i=0;i<size;i++)
                cout<<y[i]<<" ";
                cout<<"\n\nx2:";
                for (int i=0;i<size;i++)
                cout<<xx[i]<<" ";
                cout<<"\ny2:";
                for (int i=0;i<size;i++)
                cout<<yy[i]<<" ";
            cin.get();
            }
        }
}
 
return 0;
}
1
dzrkot
21.12.2013, 19:40  [ТС]     задачка попалась, не пойм у условия не полные?
  #4

Не по теме:

ох, не стоила благодарности))

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2013, 19:40

Задачка с массивом и задачка с формулами Ньютона и Лагранжа
Прошу помочь решить две задачи

Описать оператор выбора, в котором при истинности второго условия выполняются действия и третьего условия тоже
помогите пожалуйста ответить на вопрос 2. Описать оператор выбора, в котором при истинности...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru