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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jarto
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 80
#1

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

06.01.2013, 19:40. Просмотров 412. Ответов 2
Метки нет (Все метки)

В общем пишу курсовую работу. Уже устал биться с ней... Вот задание: дано N точек, из них нужно перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму. Помогите... Вот код который я осилил, но не знаю как убрать проверку комбинаций треугольников, которые уже были мной проверены.
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
#include <stdio.h>
#include <math.h>
float square(float m1, float n1, float m2, float n2, float m3, float n3);
int main()
{
    FILE *fout, *fin;
    int N;
    float x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6, sf, ss, s, s1, s2, s3, s4, s5, s6, s7, s8, s9, tmp, t = 0.01;
    fin=fopen("Koord.txt","r");
    fout=fopen("Result.txt","w");
 
    fscanf(fin,"%d \n",&N);
 
    float* X = new float [N];                             
 
    float* Y = new float [N];                             
 
    for (int i = 0; i < N; i++)    
        {
            fscanf(fin,"%f %f \n",&X[i],&Y[i]);
        }
 
        
    for (int a = 0; a < N; a++)   
        for (int b = 0; b < N; b++) 
            for (int c = 0; c < N; c++)   
                for (int d = 0; d < N; d++)
                    for (int e = 0; e < N; e++)   
                        for (int f = 0; f < N; f++) 
    {
        x1 = X[a];   x2 = X[b];   x3 = X[c];  
        y1 = Y[a];   y2 = Y[b];   y3 = Y[c];
        x4 = X[d];   x5 = X[e];   x6 = X[f];
        y4 = Y[d];   y5 = Y[e];   y6 = Y[f];  
 
        //if ((x1!=x2)&&(x2!=x3)&&(x1!=x3)&&(x4!=x5)&&(x5!=x6)&&(x4!=x6)&&(y1!=y2)&&(y2!=y3)&&(y1!=y3)&&(y4!=y5)&&(y5!=y6)&&(y4!=y6))
        //if ((a!=b)&&(b!=c)&&(a!=c)&&(d!=e)&&(e!=f)&&(d!=f))
        //if ((y1!=y2!=y3)&&(x1!=x2!=x3)&&(y4!=y5!=y6)&&(x4!=x5!=x6))
 
        
 
        sf = square(x1,y1,x2,y2,x3,y3);
        ss = square(x4,y4,x5,y5,x6,y6);
        s1 = square(x4,y4,x2,y2,x3,y3);
        s2 = square(x1,y1,x4,y4,x3,y3);
        s3 = square(x1,y1,x2,y2,x4,y4);
        s4 = square(x5,y5,x2,y2,x3,y3);
        s5 = square(x1,y1,x5,y5,x3,y3);
        s6 = square(x1,y1,x2,y2,x5,y5);
        s7 = square(x6,y6,x2,y2,x3,y3);
        s8 = square(x1,y1,x6,y6,x3,y3);
        s9 = square(x1,y1,x2,y2,x6,y6);
        if ((sf != 0) && (ss != 0))
            
        {
        if (((sf<0) && (sf<=s1) && (s1<=0) && (sf<=s2) && (s2<=0) ||
            (sf>0) && (sf>=s1) && (s1>=0) && (sf>=s2) && (s2>=0)) &&
            ((sf<0) && (sf<=s4) && (s4<=0) && (sf<=s5) && (s5<=0) ||
            (sf>0) && (sf>=s4) && (s4>=0) && (sf>=s5) && (s5>=0)) &&
            ((sf<0) && (sf<=s7) && (s7<=0) && (sf<=s8) && (s8<=0) ||
            (sf>0) && (sf>=s7) && (s7>=0) && (sf>=s8) && (s8>=0)))
        {
            s = ss - sf;
            fprintf(fout,"1-й треугольник:\nA(%3.1f;%3.1f) \nB(%3.1f;%3.1f) \nC(%3.1f;%3.1f) \n2-й треугольник:\nA1(%3.1f;%3.1f) \nB1(%3.1f;%3.1f) \nC1(%3.1f;%3.1f) \n1-й треугольник полностью принадлежит 2-му\nS2-S1=%3.1f\n\n",x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,s);
        }
        else
        {
            fprintf(fout,"1-й треугольник:\nA(%3.1f;%3.1f) \nB(%3.1f;%3.1f) \nC(%3.1f;%3.1f) \n2-й треугольник:\nA1(%3.1f;%3.1f) \nB1(%3.1f;%3.1f) \nC1(%3.1f;%3.1f) \n1-й треугольник не принадлежит полностью 2-му\n\n",x4,y4,x5,y5,x6,y6,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6);
        }
        }
    }
        
}
    
float square(float m1, float n1, float m2, float n2, float m3, float n3)
{
    float square = 0.5 * abs((m1 - m3) * (n2 - n3) - (m2 - m3) * (n1 - n3));
    return square;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2013, 19:40     Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму
Посмотрите здесь:

программа проверяющая принадлежит ли треугольник ABC кругу радиуса R C++
написать программу, которая считывает длины сторон треугольника, проверяет возможность построения треугольника и находит все медианы этого треугольник C++
Определить, принадлежит ли треугольник началу координат или нет C++
C++ Принадлежит ли начало треугольника координатам
Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть вычисления и вывод данных о фигуре, проверку существования треугольника. C++
C++ Проверить, можно ли построить треугольник из отрезков с длинами x, y, z. Предусмотреть проверку вводимых данных на отрицательность
C++ Можно ли адресной арифметикой перебрать массив массивов по первому индексу во вложенном цикле, а во внешнем по второму?
Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] C++
C++ Проверить попадание каждой из точек в треугольник
C++ Определить, принадлежит ли треугольник с заданными вершинами одной полуплоскости
Выбрать из точек множества три таких, чтобы в получившийся треугольник влезо наибольшее количество точек C++
Перебрать все возможные комбинации трех чисел от нуля до двух C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
07.01.2013, 01:24     Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму #2
суть задания не понял. что бы убрать проверку уже проверенных точек можно завести для каждой точки флаг "уже проверена", устанавливать его для уже проверенных точек, а при проверке пропускать точки с уже установленным флагом
Jarto
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 80
07.01.2013, 15:10  [ТС]     Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму #3
Хах, сам спрравился уже)
Yandex
Объявления
07.01.2013, 15:10     Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru