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

Графическое изображение геометрических фигур на координатной плоскости - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка массивов. Программа, которая вычисляет приближенно площадь фигуры, ограниченной частью кривой http://www.cyberforum.ru/cpp-beginners/thread851518.html
тема: Обработка массивов. на си++ Тема: Обработка массивов. Составить программу, которая вычисляет приближенно площадь фигуры, ограниченной частью кривой у=у(х)=х+(х^1/2)+(х^2/3)-2,5 лежащей в верхней полуплоскости, осью абсцисс и прямой х=2. Для определения левого конца интервала изменения х найти корень уравнения х+(^1/2)+(х^2/3)-2,5=0 на отрезке с точностью 10^-4 . Для решения...
C++ Перезапуск программы по таймеру Всем привет. Необходимо в определенное время перезапустить программу, запущенную на компьютере. Как реализовать? http://www.cyberforum.ru/cpp-beginners/thread851516.html
chained hash table C++
У меня вопросы на счёт chained hash table. - Можем ли мы хранить различные записи (records), чьи ключи генерируют одно и тоже значение хеш (hash value)? - пропорционально ли число записей, которые мы можем хранить - размеру хеш таблицы? - ЧИсло значений хеш (hash value) лимитировано ли размером хеш таблицы? - Нужно ли нам делать различия между элементами таблицы, котор. никогда не...
C++ не работает прога
#include <cstdlib> #include <stdio.h> #include <iostream.h> #include <math.h> #include <stdlib.h> #include <conio.h> //#define N 11
C++ Сортировка простым слиянием http://www.cyberforum.ru/cpp-beginners/thread851503.html
Нужно считать числа из двух документов, сделать слияние и сортировку и вывести результат в консоли. Искала нечто похожее, не нашла.
C++ Генеалогическое дерево Помогите придумать как решить. Каким-нибудь способом, потому что я даже не знаю как к ней подойти, при этом ее нужно сделать в консоле. Организовать генеалогическое дерево в виде многосвязного списка. Написать процедуры, позволяющие: -добавлять элементы, устанавливая родственные связи; -осуществлять поиск элемента по имени и по родственным связям; -распечатывать ветвь дерева, начиная с... подробнее

Показать сообщение отдельно
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17

Графическое изображение геометрических фигур на координатной плоскости - C++

29.04.2013, 00:02. Просмотров 1646. Ответов 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "conio.h"
#include "stdlib.h"
#include "math.h"
#include "graphics.h"
#define z 13
#define e -10
#define g 20
#define E 4
 
#define p -9
#define q 20
 
using namespace std;
 
int main(int argc, char *argv[])
{
int osy,osx,xt,yt,mx,my;
int i,n,t1,t2,t3;
//float x[E],y[E],perim;
int x[E],y[E],perim;
char s[50];
printf("\n koordinaty tochek \n-------------------------\n");
initwindow(600,600);
setbkcolor(15);
cleardevice();
setcolor(5);
my=(getmaxy()/20);
mx=(getmaxx()/20);
setlinestyle(0,1,3);
osy=getmaxy();
osx=getmaxx();
line(osx/2+p,0,osx/2+p,osy);//÷åðòèì îñü îðäèГ*Г*ГІ
line(0,osy/2+q,osx,osx/2+q);// îñü Г*áñöèññ
setlinestyle(1,1,1);
for(i=-10;i<11;i++)
{
setcolor(z);
xt=mx*(i+10);
line(xt,0,xt,osy);//âåðòèêГ*ëüГ*ûå ëèГ*ГЁГЁ
sprintf(s,"%d",i);
setcolor(0);
outtextxy(xt,osy/2+24,s);
}
for(i=-10;i<11;i++)
{
setcolor(z);
yt=my*(i+10);
line(0,yt,osx,yt);//ãîðèçîГ*ГІГ*ëüГ*ûå ëèГ*ГЁГЁ
sprintf(s,"%d",i);
setcolor(0);
outtextxy(osx/2-25,osy-yt,s);
}
n=E;
for(int i=0; i<n; i++)
    {
        //x[i]=(float)rand()/RAND_MAX*(g-e)+e;
        //y[i]=(float)rand()/RAND_MAX*(g-e)+e;
        x[i]=e+rand()%g;
        y[i]=e+rand()%g;
    }
printf(" #\tX\tY\n-------------------------\n");
for(int i=0; i<n; i++)
    {
        //printf("%2d : (%8.3f, %8.3f)\n", i+1,x[i],y[i]);
        printf("%2d : (%4d, %4d)\n", i+1,x[i],y[i]);
    }
t1=-1;t2=-1;t3=-1;perim=0;
if (n<3)
{
        printf("nedostatochno tochek dlya postroenia treugol'nika...");
        getch();
        return 0;
}
setcolor(0);
setlinestyle(0,1,3);
int count=0,i1,i2,i3;
//float r1,r2,r3;
int r1,r2,r3;
/*for(i1=0; i1<n-2; i1++)
{
        for(i2=i1+1; i2<n-1; i2++)
        {
            for(i3=i2+1; i3<n; i3++)
            {
                         printf("i1=%d   i2=%d    i3=%d\n",i1,i2,i3)
                    r1=sqrt((x[i2]-x[i1])*(x[i2]-x[i1])+(y[i2]-y[i1])*(y[i2]-y[i1]));
                    r2=sqrt((x[i2]-x[i3])*(x[i2]-x[i3])+(y[i2]-y[i3])*(y[i2]-y[i3]));
                    r3=sqrt((x[i3]-x[i1])*(x[i3]-x[i1])+(y[i3]-y[i1])*(y[i3]-y[i1]));
                x[i1]=x[i1]*mx+getmaxx()/2-8;
                x[i2]=x[i2]*mx+getmaxx()/2-8;
                x[i3]=x[i3]*mx+getmaxx()/2-8;
                y[i1]=y[i1]+getmaxy()/2+20-y[i1]*my;
                y[i2]=y[i2]+getmaxy()/2+20-y[i2]*my;
                y[i3]=y[i3]+getmaxy()/2+20-y[i3]*my;
                circle(x[i1],y[i1],1);circle(x[i2],y[i2],1);circle(x[i3],y[i3],1);
                
                    
                            //printf("treugol'nik obrazyut tochki %d, %d, %d : perimetr - %8.3f\n", i1+1, i2+1, i3+1, r1+r2+r3);
                            count++;
                            if(r1+r2+r3>perim)
                            {
                                t1=i1; t2=i2; t3=i3; perim=r1+r2+r3;
                            }
            }
        } 
}*/
for(i1=0; i1<n-2; i1++)
    for(i2=i1+1; i2<n-1; i2++)
        for(i3=i2+1; i3<n; i3++)
            {  printf("i1=%d   i2=%d    i3=%d\n",i1+1,i2+1,i3+1);
            
                x[i1]=(x[i1]+10)*mx;//+getmaxx()/2+p;
                x[i2]=(x[i2]+10)*mx;
                x[i3]=(x[i3]+10)*mx;
                y[i1]=getmaxy()-(y[i1]+10)*my;
                y[i2]=getmaxy()-(y[i2]+10)*my;
                y[i3]=getmaxy()-(y[i3]+10)*my;
                    
                circle(x[i1],y[i1],1);circle(x[i2],y[i2],1);circle(x[i3],y[i3],1);
                    r1=sqrt((x[i2]-x[i1])*(x[i2]-x[i1])+(y[i2]-y[i1])*(y[i2]-y[i1]));
                    r2=sqrt((x[i2]-x[i3])*(x[i2]-x[i3])+(y[i2]-y[i3])*(y[i2]-y[i3]));
                    r3=sqrt((x[i3]-x[i1])*(x[i3]-x[i1])+(y[i3]-y[i1])*(y[i3]-y[i1]));
                    printf("x[i1]=%d y[i1]=%d x[i2]=%d y[i2]=%d x[i3]=%d y[i3]=%d \n",x[i1],y[i1],x[i2],y[i2],x[i3],y[i3]);
               // line(x[i1],y[i1],x[i2],y[i2]);
               // line(x[i2],y[i2],x[i3],y[i3]);
                //line(x[i3],y[i3],x[i1],y[i1]); getch();
                count++;
                if((r1+r2+r3)>perim)
                    {
                            perim=r1+r2+r3;
                                t1=i1; t2=i2; t3=i3;
                                //line(x[t1],y[t1],x[t2],y[t2]);
              }     
}
                // line(x[t1],y[t1],x[t2],y[t2]);
                 //line(x[t2],y[t2],x[t3],y[t3]);
                 //line(x[t3],y[t3],x[t1],y[t1]); getch();
 
 
printf("\nnaydeno %d treugol'nikov",count);
printf("\n-----------------------------------\n");
printf("\ntreugol'nik c max perimetrom %8d obrazyuut tochki %d %d %d\n", perim, t1+1,t2+1,t3+1);
system("PAUSE");
closegraph();
return EXIT_SUCCESS; }
кинула код со всеми закомментированными кусками, ибо пыталась пробовать что-то менять и смотреть что будет.. мне не нужно писать программу, если можно, объясните мне одну вещь: я специально взяла мало точек (Е= количество точек) чтобы посмотреть, порядковый номер точек то есть и прога верно считает, даже выводит правильно количество образованных треугольников, проблема состоит в том, что расстояния от точек она считает неверно. как выяснилось, она неправильно читает сами координаты, то есть вместо допустим х=-9 у=-3 она читает х=29 у=396..

вот что выводит:
koordinaty tochek
-------------------------
# X Y
-------------------------
1 : ( -9, -3)
2 : ( 4, -10)
3 : ( -1, -6)
4 : ( 8, 8)
i1=1 i2=2 i3=3
x[i1]=29 y[i1]=396 x[i2]=406 y[i2]=599 x[i3]=261 y[i3]=483
i1=1 i2=2 i3=4
x[i1]=1131 y[i1]=-11175 x[i2]=12064 y[i2]=-17062 x[i3]=522 y[i3]=77
i1=1 i2=3 i3=4
x[i1]=33089 y[i1]=324384 x[i2]=7859 y[i2]=-13698 x[i3]=15428 y[i3]=-1924
i1=2 i2=3 i3=4
x[i1]=350146 y[i1]=495107 x[i2]=228201 y[i2]=397551 x[i3]=447702 y[i3]=56105

naydeno 4 treugol'nikov
-----------------------------------

treugol'nik c max perimetrom 44348 obrazyuut tochki 1 2 4
Для продолжения нажмите любую клавишу . . .

откуда она берёт эти числа я понять не могу т___т помогите

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

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