Форум программистов, компьютерный форум CyberForum.ru

Найти такой отрезок, построенный на паре точек из заданного множества, который пересекал бы максимальное число прямых, построенных на остальных точках - C++

Восстановить пароль Регистрация
 
Alex1000
0 / 0 / 0
Регистрация: 02.01.2012
Сообщений: 17
29.06.2012, 11:20     Найти такой отрезок, построенный на паре точек из заданного множества, который пересекал бы максимальное число прямых, построенных на остальных точках #1
На плоскости задано множество точек. Найти такой отрезок, построенный на паре точек из этого множества, который пересекал бы максимальное число прямых, построенных на остальных
вот мои наработки с комментариями:
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <locale>
#include <conio.h>
using namespace std;
// описание структура вектора
struct vect 
{   double x;
    double y;
};
// вычисление суммы векторов
vect sumVect(vect a,vect b){
    vect c;
    c.x=a.x+b.x;
    c.y=a.y+b.y;
    return c;
};
// вычисление разности векторов
vect difVect(vect a,vect b){
    vect c;
    c.x=a.x-b.x;
    c.y=a.y-b.y;
    return c;
};
// вычисление скалярного произведения 
double scalMult(vect a,vect b){
    return (a.x*b.x+a.y*b.y);
}
// вычисление произведения числа на вектор
vect numbMult(double n, vect a){
    vect b;
    b.x=n*a.x; b.y=n*a.y;
    return b;
}
// вычисление проекции вектора а на вектор n
vect proectAN(vect a,vect n) {
    double k = scalMult(a,n)/scalMult(n,n);
    return(numbMult(k,n));
}
// вычисление проекции вектора а плоскость с нормалью n
vect normAN(vect a,vect n){
    vect b=proectAN(a,n);
    return(difVect(a,b)); 
}
// печать вектора
void printVect(vect a){
    cout << "\nx= " <<a.x << "\ty= " << a.y; 
}
// чтение из файла массива тестов
int inTests(int &k, vect *&a, vect *&n){
    ifstream f;
    char filename[100];
    cout << "введите имя файла с тестами" << endl;
    cin >> filename;
 
    f.open(filename);
    if (!f)
        return 0;
    f >> k;
    a=new vect[k]; n=new vect[k];
    for (int i=0;i<k;i++)
        f >> a[i].x >> a[i].y >> n[i].x >> n[i].y;
    f.close();
    return 1;
}
int main()
{
    setlocale(LC_ALL,"russian");
 
    int k;
    vect *a, *n;
    // ввод тестов
    if (!inTests(k,a,n)){
        cout << "\n не прошло чтение тестов !!!\n"; return 0;
    }
    vect an,aon;
    // цикл по тестам
    for (int i=0; i<k; i++){
        cout << "\nvect"; printVect(a[i]);
        cout << "\nnorm"; printVect(n[i]);
        cout << "\nproect"; an=proectAN(a[i],n[i]); printVect(an);
        cout << "\nnormal"; aon=normAN(a[i],n[i]); printVect(aon);
        cout << "\nortogon\t" << scalMult(an,aon);
        cout << "\n";
    }
    return(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2012, 11:20     Найти такой отрезок, построенный на паре точек из заданного множества, который пересекал бы максимальное число прямых, построенных на остальных точках
Посмотрите здесь:

найти такую точку заданного на плоскости множества точек, сумма расстояний от которой до остальных минимальна. C++
C++ Найти сумму и число тех элементов заданного массива X1,X2, … ,Xn, которые попадают на заданный отрезок.
C++ [C++] найти точку на плоскости сумма расстояний от которой до остальных точек множества максимальна.
найти такую точку заданного на плоскости множества точек, сумма расстояний от которой до остальных минимальна C++
C++ Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества
C++ В каждой паре найти максимальное число. Вывести его
C++ Среди заданных точек на плоскости найти ту, у которой расстояние суммы равно наибольшему от остальных точек
Площадь треугольников построенных на n точках C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru