Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Построение графика функции


Автор: Dorf 17.2.2004, 18:19
У меня никак не получается построить график функции, с автомасштабированием. Он постоянно выводит какую-то билебирду. Может кто-нибудь знает или исходничек подкинет?

Автор: hyzhak 17.2.2004, 20:20
можешь уточнить проблему, в чем пишешь. И кусок кода кинуть?

Я вообщето выводил както и через GDI, OpenGL, да и просто Chart юзал, у всех свои заморочки smile.gif.

обычно просто: от точки к точке линию рисуешь. А раз авто-масштабирование определяешь крайние точки и от них пляшешь, с корректирующим коэффициентом выводя.

Автор: Mal Hack 17.2.2004, 20:53
hyzhak, судя из названия темы, используется программирование под ДОС...
Dorf, скорее всего ты сам график строишь неправильно, а точнее по точкам, когда надо по линиям..

Вот тебе исходник стопудоваработающей программы с маштабируемостью. Писал на практике в прошлом году...
Код
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
void main(void)
{
char ch;
int krugx[4],krugy[4];
clrscr(); int d=DETECT,m=DETECT;
float n=1;
initgraph(&d,&m,"");
float smx=0,smy=0;
do
{
krugx[1]=1; krugx[2]=-1; krugx[3]=0; krugx[4]=0;
krugy[1]=0; krugy[2]=0; krugy[3]=1; krugy[4]=-1;
clearviewport();
float rad_big=100/n,rad_mid=50/n,rad_lit=25/n,rad_sm=10/n;
float x,y,sm_x=(getmaxx()/2)+smx,sm_y=(getmaxy()/2)+smy;
setcolor(WHITE);
circle(sm_x,sm_y,rad_big);
for(int i=1;i<=4;i++)
{
x=sm_x+((rad_big*krugx[i])); y=sm_y+((rad_big*krugy[i]));
circle(x,y,rad_mid);
}
for(i=1;i<=4;i++)
for(int j=1;j<=4;j++)
 {
 x=sm_x+((rad_big*krugx[i]))+((rad_mid*krugx[j])); y=sm_y+((rad_big*krugy[i]))+((rad_mid*krugy[j]));
 circle(x,y,rad_lit);
 }
for(i=1;i<=4;i++)
for(int j=1;j<=4;j++)
 for(int k=1;k<=4;k++)
  {
  x=sm_x+((rad_big*krugx[i]))+((rad_mid*krugx[j]))+(rad_lit*krugx[k]); y=sm_y+((rad_big*krugy[i]))+((rad_mid*krugy[j]))+((rad_lit*krugy[k]));
  circle(x,y,rad_sm);
  }
ch=getch();
if(ch=='9') n=n+0.02;
if(ch=='3') n=n-0.02;
if(ch=='2') smy=smy+2;
if(ch=='4') smx=smx-2;
if(ch=='6') smx=smx+2;
if(ch=='8') smy=smy-2;
} while(ch!='1');
closegraph();
}

Увеличить масштаб - 3, уменьшить - 9, выход - 1..
Прога написана хоть и коряво, но смысл самого масштабирования реализован...

Автор: shara 29.6.2004, 03:47
кроче, у меня есть отличная прога для построения графиков(правда на BASICe), написанная мною. если хош могу прислать, или объяснить как она работает. вообще алгоритм построения графика очень элементарный и оригинальный. А маштабирование - понятие растяжымое, я имею ввиду как построить в маштабе прямую, которя по своему определению - БЕСКОНЕЧНАЯ или как её построить не в маштабе. но тут можно кое-что сделать. короче если кому чё надо - невопрос помогу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)