|
Новичок
Регистрация: 15.05.2008
Сообщений: 9
С нами:
9468639
Репутация:
1
|
|
Подскажите пожалуйста что здесть не так?
PHP код:
#include <graphics.h> //Подключение библиотек
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
#define mash 40 //Масштаб - количество пикселей равное числу 0.2
#define PI 3.141592653 //Первая математическая константа(Число Пи(^_^))
#define angle5 0.0872665 //Пять градусов в радианах
#define step 0.0001 //Шаг перебора значений переменной t, при маленьких значениях увеличивается время работы, при больших целостность графика теряется
double A,B,C,D,x1,y1,x2,y2,t,anglex=0.0;
int x,y,maxx,maxy,pmsh=0,sdx=0,sdy=0,g=0;
void drawgraph();
void drawset(){ //Начало функции построения системы координат
int i;
clrscr(); //очистка текстового экрана (Возвращение каретки в начало)
setfillstyle(SOLID_FILL, 0);
bar(0,0,maxx,maxy); //Очистка графического экрана
printf("\n\n\n y=%.2lf*(exp(x/2)+exp(-x/2))/2",A); //Zamenit' na viravnivanie po pravoi stenke!!!
if(A>0.0)
printf("\n max - none\n min = %.2lf",A);
if(A<0.0)
printf("\n max = 0.0\n min = 0.0");
if(A==0.0)
printf("\n max = %.2lf\n min - none",A);
//printf("\n\t\t\t\t\t y=sin(%.2lf+%.2lf*t)*cos(%.2lf+t)",A,B,D);
settextstyle(SMALL_FONT, HORIZ_DIR, 4); //Выбор шрифта
setlinestyle(SOLID_LINE, 1, 1); //Выбор пунктирной линии
if(g%2==0){
line(0,maxy/2,maxx,maxy/2); //Построение линий координатной сетки
line(maxx/2,0,maxx/2,maxy);
moveto(maxx/2+5,maxy/2+5);
outtext("0");
outtextxy(maxx/2-10,5,"Y");
outtextxy(maxx-14,maxy/2-14,"X");
for(i=1;(i*mash<maxx/2)||(i*(mash+pmsh)<maxy/2);i++){ //Цикл построение шкалы
line(maxx/2+i*(mash+pmsh),maxy/2+5,maxx/2+i*(mash+pmsh),maxy/2-5); //Деления на положительной части шкалы абсцисс
line(maxx/2-i*(mash+pmsh),maxy/2+5,maxx/2-i*(mash+pmsh),maxy/2-5); //Деления на отрицательной части шкалы абсцисс
line(maxx/2-5,maxy/2-i*(mash+pmsh),maxx/2+5,maxy/2-i*(mash+pmsh)); //Деления на положительной части шкалы ординат
line(maxx/2-5,maxy/2+i*(mash+pmsh),maxx/2+5,maxy/2+i*(mash+pmsh)); //Деления на отрицательной части шкалы ординат
moveto(maxx/2+i*(mash+pmsh)+5,maxy/2+5); //Нанесение значений шкалы х
switch(i){
case 1: outtext("1");break;
case 2: outtext("2");break;
case 3: outtext("3");break;
case 4: outtext("4");break;
case 5: outtext("5");break;
case 6: outtext("6");break;
case 7: outtext("7");break;
case 8: outtext("8");break;
}
moveto(maxx/2-i*(mash+pmsh)+5,maxy/2+5); //Нанесение значений шкалы х
switch(i){
case 1: outtext("-1");break;
case 2: outtext("-2");break;
case 3: outtext("-3");break;
case 4: outtext("-4");break;
case 5: outtext("-5");break;
case 6: outtext("-6");break;
case 7: outtext("-7");break;
case 8: outtext("-8");break;
}
moveto(maxx/2+5,maxy/2-1+i*(mash+pmsh)); //Нанесение значений шкалы у
switch (i){
case 1: outtext("-1");break;
case 2: outtext("-2");break;
case 3: outtext("-3");break;
case 4: outtext("-4");break;
case 5: outtext("-5");break;
case 6: outtext("-6");break;
case 7: outtext("-7");break;
case 8: outtext("-8");break;
case 9: outtext("-9");break;
case 10: outtext("-10");break;
case 11: outtext("-11");break;
}
moveto(maxx/2+6,maxy/2+1-i*(mash+pmsh)); //Нанесение значений шкалы у
switch (i){
case 1: outtext("1");break;
case 2: outtext("2");break;
case 3: outtext("3");break;
case 4: outtext("4");break;
case 5: outtext("5");break;
case 6: outtext("6");break;
case 7: outtext("7");break;
case 8: outtext("8");break;
case 9: outtext("9");break;
case 10: outtext("10");break;
case 11: outtext("11");break;
}
} //Конец цикла
}
drawgraph();
} //Конец функции
void drawgraph(){ //Функция построения графика
t=maxx/(2*(mash+pmsh));
for(x1=-t;x1<=t;x1+=step){ //Перебор ОДЗ t
y1=A*(exp(-x1/2)+exp(x1/2))/2; //Получение координаты х
x2=x1*cos(anglex)-y1*sin(anglex); //Смещение координат в случае
y2=y1*cos(anglex)+x1*sin(anglex); //Поворота графика на угол anglex
x =x2*(mash+pmsh)+sdx; //Координата х с учетом возможного сдвига и масштаба
y =-y2*(mash+pmsh)+sdy; //Координата у с учетом возможного сдвига ,масштаба и добавочного масштаба для у
putpixel(maxx/2+x,maxy/2+y,5); //Нанесение полученной точки на экран
}
//drawset(); //Вызов функции drawset
} //Конец функции построения графика
void main(){ //Основная функция
char ci;
int gdriver = DETECT, gmode, errorcode;
clrscr();
printf("\nGraffic y=A*(exp(x/2)+exp(-x/2))/2\n");
printf("\nEnter A:");
while(scanf("%lf", &A)!=1){ //Ввод коэффициентов графика
printf("\nError! Re-enter please> ");
ci='c'; while((ci!='\n') && (ci!=EOF)) ci=getchar();}
clrscr();
printf("\nControl:\n\nQ - quit\nG - hide set\n\nA - dicrease \"y\" scale\nS - increase \"y\" scale\nD - reset \"y\" scale\n\nZ - rotate -5gr\nX - rotate 5gr\nC - reset rotate angle");
printf("\n\n2 - y-15pix\n8 - y+15pix\n4 - x-15pix\n6 - x+15pix\n5 - reset");
getch();
initgraph(&gdriver, &gmode, "C:\\BORLANDC\\BGI"); //Инициализация графического режима
errorcode = graphresult();
if (errorcode != grOk){
printf("Graphics error: %s\n", grapherrormsg(errorcode)); //Вывод сооьветствующего сообщения в случае ошибки инициализации графического режима
printf("Press any key to halt:");
getch();
exit(1);}
maxx=getmaxx();//Получение разрешения экрана
maxy=getmaxy();
while(1){ //Вывод графика и ожидание действий
drawset();
ci=getch();
if(ci=='q') break;
if(ci=='g') g++;
if(ci=='x') anglex+=angle5;
if(ci=='z') anglex-=angle5;
if(ci=='a') pmsh-=(mash+pmsh)/10;
if(ci=='s') pmsh+=(mash+pmsh)/10;
if(ci=='c') anglex=0;
if(ci=='d') pmsh=0;
if(ci== 50) sdy+=15;
if(ci== 52) sdx-=15;
if(ci== 53) sdy=sdx=0;
if(ci== 54) sdx+=15;
if(ci== 56) sdy-=15;}
closegraph(); //Закрытие видеорежима
} //Конец программы
Помогите, заранее благодарен! Спасибо!
|