Autorem poniższego opracowania (wraz z kodem źródłowym i rysunkami) jest dr Piotr A. Dybczyński z Instytutu Obserwatorium Astronomiczne UAM w Poznaniu.
Napiszmy taki programik:
/*****************************************************************************
**** fig_04.c ****
******************************************************************************
**** ****
**** Kopia fig_03.c ale zamieniona na przykład programu ****
**** wykorzystującego bibliotekę graficzną PGPLOT ****
**** ****
**** ****
******************************************************************************
* *
* *
******************************************************************************
**** Created by PAD, last modified: 28-10-2008 ****
*****************************************************************************/
#include <stdio.h>
#include <math.h>
#include "cpgplot.h"
int main(void)
{
int i,k,n;
float x0,y0,z0,x,y,z,r,r0,t,xp,yp,zp;
double kat,eps,rot,rot1;
k=cpgopen("?"); /* taki argument powoduje, że progam zapyta, gdzie rysować... */
if(k!=1) {
puts("\n\ncpgopen error\n");
return 0;
}
cpgslw(6); /* ustalamy grubość linii na 6 */
cpgenv(-512,512,-384,384,1,-2); /* definiujemy obszar rysowania, z równymi skalami w x i y , oraz bez ramki i osi */
x0=0;
y0=0;
z0=0;
r0=360;
/* poniżej, trzy eksperymentalnie dobrane wartości kątów, by rysunek był "ładny" */
kat=70.0/180.0*M_PI;
rot=50.0/180.0*M_PI;
rot1=107.0/180.0*M_PI;
cpgsfs(2); /* ustalamy, że figury rysowane będą bez wypełnienia */
cpgsci(4);/* rysujemy na niebiesko */
cpgtext(-210,-270,"Sfera niebieska");
cpgcirc(x0,y0,r0); /*rysujemy obrys sfery niebieskiej */
cpgsci(3); /* rysujemy na zielono */
/* ta pętla prymitywnie, po kropce, rysuje okrąg nachylony pod katem 70 stopni, tu równik niebieski*/
for(t=0;t<(2.0*M_PI);t+=0.0001)
{
x=r0*cos(t);
y=r0*sin(t)*cos(kat);
cpgpt1(x,y,-1); /* ta funkcja stawia kropkę w miejscu (x,y) */
}
cpgsci(2); /* rysujemy na czerwono */
/* a ta pętla ta samą prostą technika rysuje południk */
for(t=M_PI;t<(2.0*M_PI);t+=0.0001)
{
x=r0*cos(t);
y=r0*sin(t)*cos(rot);
xp=x*cos(rot1)-y*sin(rot1);
yp=x*sin(rot1)+y*cos(rot1);
cpgpt1(xp,yp,-1);
}
cpgsci(1); /* rysujemy na czarno */
/*rysujemy promienie wodzące */
x=0;
y=360.0*cos(20.0/180.0*M_PI);
cpgpt1(0,y,-1);
cpgdraw(0,0);
cpgdraw(245,-89);
cpgclos();
return 0;
}
Jeśli zapiszemy go w pliku fig_04.c, wykonamy polecenie: "gcc -Wall fig_04.c -o fig_04 -lcpgplot -lpgplot -lpng -lz -lX11 -lm" , to powstanie na dysku wykonywalny plik o nazwie "fig_04".
Spróbujmy go wykonać poleceniem: "./fig_04"
Jeśli klepniemy Enter wybierając urządzenie domyślne (/xwindow) pojawi się okienko a w nim rysunek, jak obok.
Jeśli klikniemy na pokazaną obok miniaturkę, zobaczymy obrazek w pełnej rozdzielczości. Jest to plik w formacie PNG, otrzymany po uruchomieniu tego samego programu "./obrazek", ale po wybraniu urządzenia "/VCPS" (od ang. Vertical Color PostScript).
Powstała w ten sposób wersja postscript -owa tego obrazka, którą następnie przerobiłem GIMP -em na bitmapę wysokiej rozdzielczości, "zmiękczyłem" dla zasymulowania "antialiasingu" i pomniejszyłem.