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

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

Восстановить пароль Регистрация
 
Jarto
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 80
06.01.2013, 19:40     Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму #1
В общем пишу курсовую работу. Уже устал биться с ней... Вот задание: дано 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 треугольника и проверить, принадлежит ли первый треугольник второму
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,229
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 треугольника и проверить, принадлежит ли первый треугольник второму
Ответ Создать тему
Опции темы

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