Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 17:40   #1
xitrec1zaraza
Пользователь
 
Регистрация: 27.11.2010
Сообщений: 17
Печаль Задание, параметрические задачи :(

Построить элипс с большими и малыми полуосями, равными соответственно r(1) и r(2), расположенными параллельно осям координат, заданными параметрически:

система уравнений:

x=r(1)cost;
Y=r(1)sint,

где T на промежутке [0,2pi)


1.Не могу понять условия задачи
2. Есть готовая, но другая, что нужно изменить?
3. Объясните пожалуйста всю программу что где делается.
Код:
#include <iostream.h>
#include <iomanip.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

float scale; 
int cx,cy; 
int maxX,maxY; 
const float PI=3.14159265;

float f(float x); 
void axis(); 
void razmetka(); 
void draw_function(); 
char* floattoa(float j); 

main() {
int dr,mode; 
int errorcode; 

dr=DETECT; 
initgraph(&dr,&mode,"I:\\BORLANDC\\BGI");
errorcode=graphresult(); 
if (errorcode!=grOk) {
cout<<"Graphic system error: "<<grapherrormsg(errorcode)<<endl;
cout<<"Press any key..."<<endl;
getch();
exit(1);} 

maxX=getmaxx();
maxY=getmaxy();
cx=maxX/2;
cy=maxY/2;

setbkcolor(WHITE); 
setcolor(BLUE); 

outtext("Input scale (20..100):");
gotoxy(27,1);
cin>>scale;
cleardevice(); 
axis(); 
razmetka(); 
outtextxy(10,30,"y=cos(x-1)+|x|");
draw_function(); 
getch();
closegraph(); 
return 0;
}

float f(float x){
return (cos(x-1)+fabs(x));
}

void axis(){
setcolor(BLUE);
line(cx,0,cx,maxY); 
line(0,cy,maxX,cy); 
line(maxX-10,cy-5,maxX,cy); 
line(maxX-10,cy+5,maxX,cy);
line(cx,0,cx-5,10); 
line(cx,0,cx+5,10);
outtextxy(maxX-10,cy+20,"X"); 
outtextxy(cx+10,10,"Y"); 
}

void razmetka(){
float i, j; 
char *s;
setcolor(BLUE); 

j=0; 
do{
i=cx-j*scale; 
line(floor(i),cy-5,floor(i),cy+5); 
if(j!=0){
s=floattoa(-j); 
outtextxy(floor(i)-10,cy+10,s);
}
i=cx+j*scale;
line(floor(i),cy-5,floor(i),cy+5);
if (j!=0){
s=floattoa(j);
outtextxy(floor(i)-10,cy+10,s);
}
j=j+PI; 
}
while (j<=8*PI); 
j=0;
do{
i=cy-j*scale;
line(cx+3,floor(i),cx-3,floor(i));
if (j!=0) {
s=floattoa(j);
outtextxy(cx+15,floor(i)-2,s);
}
i=cy+j*scale;
line(cx+3,floor(i),cx-3,floor(i));
if (j!=0) {
s=floattoa(-j);
outtextxy(cx+15,floor(i)-2,s);
}
j=j+0.5;
}
while(j<=100);
}

void draw_function() {
int x0, y0, x1, y1; 
float x; 
setcolor(RED);
for(x0=0;x0<=maxX;x0++){
x=(x0-cx)/scale; 
y0=floor(cy-scale*f(x)); 
if(x0>0) line(x0,y0,x1,y1); 
x1=x0; 
y1=y0; 
}
}

char* floattoa(float j) {
int i, l;
int dec, sign;
const int ndig=2; 
char *s;
s=fcvt(j,ndig,&dec,&sign); 

char *snew=new char[strlen(s)+3];
i=l=0;
if(sign){snew[l]='-'; l++;}
while(s[i]!='\0'){
if(i==dec) {snew[l]='.'; l++;}
snew[l]=s[i];
i++;
l++;
}
s[l]='\0';
return snew; 
}

Последний раз редактировалось Stilet; 04.12.2010 в 17:44.
xitrec1zaraza вне форума Ответить с цитированием
Старый 04.12.2010, 17:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
1.Не могу понять условия задачи
Попробую пояснить
Тебе даны большая и малая полуоси - R1,R2. это числа, их например вводят с клавиатуры или забивают в код.
Так же известны формулы построения эллипса
x=r(1)cost;
Y=r(1)sint,

где t - угол.
В цикле меняй его от 0 до 2*PI и получай новые координаты
Код:
for(float t=0;t<=2*3.14;t+=0.1){
 x=r1*cos(t);
 y=r2*sin(t), 
 line(cx+floor(x),cy+floor(y));// Вот тут могу ошибиться точно не помню как в си это
}
Где cx,cy - координаты центра эллипса
Таким образом можно построить эллипс.
Твой пример видимо еще и координатную сетку строит
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2010, 01:05   #3
xitrec1zaraza
Пользователь
 
Регистрация: 27.11.2010
Сообщений: 17
По умолчанию

Вы мне помогли! спасибо! не могли бы пояснить какая строка что делает для ламера, спасибо
xitrec1zaraza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание IIaIIa_Na_OXOTE Помощь студентам 2 29.11.2010 14:24
Задачи в делфи. информационная модель задачи. @leks@ Помощь студентам 2 17.10.2010 19:15
Задание Олфелия Помощь студентам 6 08.10.2009 16:59
Задание / Си Drozvd Помощь студентам 6 11.08.2009 06:33
Параметрические запросы VarVara PHP 0 31.05.2007 14:03