IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите с задачей на си (http://www.imho.ws/showthread.php?t=141373)

Malina 28.09.2009 15:39

Помогите с задачей на си
 
помогите разобраться в программе. Эта программма для того , чтобы выводить на экран sin(x).
#include <gtk/gtk.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define max(x,y) ((x)>(y)?(x):(y))


void draw( GdkDrawable *w, GdkGC * gc, int X1, int Y1, int X2, int Y2, float x1, float y1, float x2, float y2 ); //, float (*f)(float ));


float f( float x )
{
return sin(x);
}

void draw( GdkDrawable *w, GdkGC * gc, int XX1, int YY1, int XX2, int YY2, float x1, float y1, float x2, float y2 ) //, float (*f)(float ))*/
{
float x, X1, Y1, X2, Y2;
int X, Y;

X1 = (float)XX1; X2 = (float)XX2; Y1 = (float)YY1; Y2 = (float)YY2;

for( X = XX1; X <= XX2; X++ )
{
x = (float)(((float)X - X1 )/( X2 - X1 ))*( x2 - x1 ) + x1;

Y = (int)(( -f(x)- y1 )/( y2 - y1 )*( Y2- Y1 ) + Y1);

gdk_draw_point( w, gc, X, Y );
}
}

gboolean on_draw (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
GdkGC * gc = widget->style->fg_gc[GTK_WIDGET_STATE (widget)];
GdkColor * clr = new GdkColor();
clr->pixel = 0;
clr->red = 0xffff;
clr->green = 0x8000;
clr->blue = 0;

gdk_gc_set_rgb_fg_color( gc, clr );

draw(widget->window, gc, 0,0, widget->allocation.width, widget->allocation.height, -3.14, -1, 3.14, 1 );//, f);
return TRUE;
}

int main ( int argc, char ** argv )
{
gtk_init( &argc, &argv);
GtkWidget * window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (window, 400, 400);
g_signal_connect (G_OBJECT (window), "expose_event", G_CALLBACK (on_draw), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}

Мне нужно на подобие этой программки, написать такую же, только такую, которая строит график x, y. и чтобы там был sin(x), cos(x), tn(x). Буду очень благодарна. Ну или хотя бі скажите библиотеку, которая рисует график или комментарии к программе.

Hubbitus 29.09.2009 10:38

Цитата:

Сообщение от Malina (Сообщение 1676345)
Ну или хотя бі скажите библиотеку, которая рисует график или комментарии к программе.

Ну библиотека GTK в данном примере с отрисовкой помоему вполне справляется. Разве нет?

Malina 29.09.2009 13:46

Мне сказали что надо еще что-то подключить.

Hubbitus 29.09.2009 14:36

Ну "подключить" нужно GTK-библиотеку и ее подбиблиотеки, я этот сделал так Линуксе (разумеется devel-библиотеки вроде gtk2-devel должны быть установлены):
Код:

g++ `pkg-config gtk+-2.0 --cflags --libs` 1.c
После этого просто запустил получившийся бинарник и вижу график в окошке. То есть все работает и код нормальный.


Часовой пояс GMT +4, время: 18:01.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.