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

Работа с графикой - C++

Восстановить пароль Регистрация
 
Northex
0 / 0 / 0
Регистрация: 14.12.2010
Сообщений: 14
15.01.2011, 14:17     Работа с графикой #1
ЗДравствуйте нужна помощь. среда Borland C 3.1
задание такое

Дана аффинная система координат (γ=60̊̊̊ ) и функция y(x)=x*x
Построить ее график.

причем:
В задании используются параметры Xmin, Xmax, Ymin, Ymax, x, y. Эти параметры заданы в декартовой системе координат. Если в вашем задании система координат аффинная то необходимо получить значение этих параметров в декартовой системе координат.

я написал программу но он рисует мне график под углом а должен в декартовой (угол между осями ОХ и ОУ 90 градусов)
помогите пожалуйста.
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <graphics.h>
double ChoiseStep (double vmin, double vmax)
{
   double dv, exp, mnt, kf;
   dv=fabs(vmax-vmin);
   dv=fabs(vmax-vmin);
   exp=pow10(floor(log10(dv)));
   mnt=dv/exp;
   if (mnt<= 1.5) kf = 0.25;
   else if (mnt<=3.0) kf=0.5;
   else if (mnt > 6.0) kf=2.0;
   else kf=1.0;
   return exp*kf;
}
void main(void)
{
     int gd = 0, gdmode = 0;
     int wndSizeX, wndSizeY;
     int left, bottom, Xscreen, Yscreen;
     double scaleX, scaleY;
     int  Xscreen2, Yscreen2;
     int screenSizeX, screenSizeY;
     double const PI=3.14;
     double x, y, stepX, stepY, xa, ya,i;
     double minX, maxX;
     double minY, maxY;
   
     initgraph(&gd, &gdmode,"" );
 
      if (graphresult()!=0 )
       {
        printf("ERROR grafi4eskogo regima");
        getch();
        return;
       }
     cleardevice();
     printf("Input minX=");
     scanf("%lf", &minX);
     printf("Input maxX=");
     scanf("%lf", &maxX);
       if (minX>maxX)
        {
         printf("ERROR minX < maxX");
         getch();
         return;
        }
     screenSizeX=getmaxx()+1;
     screenSizeY=getmaxy()+1;
     wndSizeX=screenSizeX*0.8;
     wndSizeY=screenSizeY*0.8;
     left=(screenSizeX-wndSizeX)/2;
     bottom=(screenSizeY+wndSizeY)/2;
     
     
     setcolor(LIGHTGRAY);
     setlinestyle(DOTTED_LINE, 0, NORM_WIDTH);
     stepX=ChoiseStep(minX, maxX);
 
     ya=minX*minX;
     minY=ya*sin(PI/3);
     maxY=minY*cos(PI/3);
      for (i=minX; i<maxX; i=i+0.001)
       {
        ya=i*i;
        y=ya*sin(PI/3);
        if (y<minY) minY=y;
        if (y>maxY) maxY=y;
       }
     scaleX=wndSizeX/(maxX-minX);
     scaleY=wndSizeY/(maxY-minY);
 
      for(x=ceil(minX/stepX)*stepX; x<maxX; x=x+stepX)
       {
        Xscreen=left+(x-minX)*scaleX;
        line(Xscreen, bottom-wndSizeY, Xscreen, bottom);
       }
     stepY=ChoiseStep(minY, maxY);
      for(y=ceil(minY/stepY)*stepY; y<maxY; y=y+stepY)
       {
        Yscreen=bottom-(y-minY)*scaleY;
        line(left, Yscreen, left+wndSizeX, Yscreen);
       }
     ya=minX*minX;
     x=minX+ya*cos(PI/3);
     y=ya*sin(PI/3);
     Xscreen=left+(x-minX)*scaleX;
     Yscreen=bottom-(y-minY)*scaleY;
     setcolor(GREEN);
     setlinestyle(SOLID_LINE, 0, NORM_WIDTH);
 
      for(xa=minX+(maxX-minX)/1000; xa<=maxX; xa=xa+(maxX-minX)/1000)
       {
        ya=xa*xa;
        x=xa+ya*cos(PI/3);
        y = ya*sin(PI/3);
        Xscreen2=left+(x-minX)*scaleX;
        Yscreen2=bottom-(y-minY)*scaleY;
         if (((Yscreen>bottom-wndSizeY && Yscreen<bottom) && (Xscreen>left && Xscreen<left+wndSizeX)) ||
            ((Yscreen2>bottom-wndSizeY && Yscreen2<bottom) && (Xscreen2>left && Xscreen2<left+wndSizeX)))
            line(Xscreen, Yscreen, Xscreen2,Yscreen2);
            Xscreen=Xscreen2;
            Yscreen=Yscreen2;
        }
     setcolor(WHITE);
     setlinestyle(SOLID_LINE, 0, THICK_WIDTH);
     rectangle( (screenSizeX-wndSizeX)/2, (screenSizeY-wndSizeY)/2,
              (screenSizeX+wndSizeX)/2, (screenSizeY+wndSizeY)/2);
     getch();
     closegraph();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2011, 14:17     Работа с графикой
Посмотрите здесь:

C++ Работа с графикой
Работа с ГРАФИКОЙ C++
РАБОТА С ГРАФИКОЙ C++
C++ Работа с графикой
C++ Работа с графикой
Работа с графикой в СИ++ C++
Работа с графикой C++
Работа с графикой C++

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

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

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