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

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

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

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

06.01.2013, 19:40. Просмотров 423. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2013, 19:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму (C++):

Перебрать все возможные комбинации трех чисел от нуля до двух - C++
Здравствуйте, помогите, пожалуйста, разобраться с темой (лучше всего написать код, а то на словах вроде понятно, но код всё же лучше) ...

Построить два треугольника с вершинами в заданном множестве точек на плоскости так, чтобы первый треугольник лежал строго внутри второго - Pascal ABC
Здравствуйте, помогите пожалуйста решить задачу: Построить два треугольника с вершинами в заданном множестве точек на плоскости...

Перебрать все возможные комбинации - Pascal ABC
Доброго времени суток. Столкнулся с такой задачей и не знаю, как подступится. Опишу своими словами. Есть четыре столбика слов. В...

Перебрать все комбинации цифр - Pascal
Люди помогите как перебрать все комбинации цифр на с++ или Паскаль. Например дано 1 2 3 4 прог будет перебрать 1 2 4 3; 1 3 2 4; 1 3 4...

Перебрать все комбинации заданных чисел - C#
Здравствуйте. Это легче показать на примере. Будет нагляднее. Например, в первой строке консоли вводятся несколько некоторых чисел (то...

Как перебрать все возможные комбинации из n объектов? - Комбинаторика
Доброго дня, пытаюсь написать программу которая бы перебрала все возможные комбинации из n объектов или конкретнее у нас есть массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
07.01.2013, 01:24 #2
суть задания не понял. что бы убрать проверку уже проверенных точек можно завести для каждой точки флаг "уже проверена", устанавливать его для уже проверенных точек, а при проверке пропускать точки с уже установленным флагом
0
Jarto
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 80
07.01.2013, 15:10  [ТС] #3
Хах, сам спрравился уже)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 15:10
Привет! Вот еще темы с ответами:

Перебрать все возможные комбинации заданных символов - PascalABC.NET
нужно программа, которая перебирает все возможные комбинации заданных символов,

Перебрать все возможные комбинации трех фигур - Visual Basic .NET
подскажите как реализовать такое: есть три фигуры - круг,квадрат,треугольник необходимо создать возможные комбинации из 3,4,5,6,7,8,9,...

Перебрать все возможные комбинации соединений для N треугольников M палочек - Комбинаторика
Всем доброго времени суток. Возникла необходимость в вашей помощи. Пока я нахожусь на стадии обдумывания задачи, так что можно отвечать...

Перебрать в цикле все возможные комбинации: вопрос оптимизации кода - C#
Здравствуйте! Задача следующая: есть несколько массивов. Пусть будет 5. Необходимо перебрать все возможные комбинации по 5 значений, каждое...


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

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

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