Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:17

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jul 06, 2009 23:03 
Offline
DGL Member

Registriert: Mo Jul 06, 2009 19:39
Beiträge: 4
Hallo Liebe Leute,
ich habe am Freitag meine Abgabe über mein openGL-Programm.
ich habe angenfangen zu Programmieren aber ich komme leider nicht weiter.
das Programm soll eine Approximationskurve zeichnen und das habe ich auch
hinbekommen, doch nun soll ich noch eine Funktion erstellen, wo das Programm
mit der Approximationskurve eine Approximations polynom zeichnen soll, doch
ich bekomme es nicht hin. Ich habe die Matrix für die LR-Zerlegung gemacht
und nun fällt mir noch die letzte Funktion.
ich bitte euch liebe leute mir irgendwie zu helfen, vielleicht auch das Programm zu ende zu schreiben.
ihr wärt mir eine Große HILFE.
falls sich irgendjemand melden würde: dann bitte auf diese Adresse: bevhillmont@gmx.de
hier mein quellcode: (in diesem quellcode ist alles dabei, nur wie gesagt das mit der polynom aufgabe fehlt.)
hier die pdf dateien, vielleicht helfen sie euch weiter: http://user.fh-frankfurt.de/~rewolf/LGnepo/approx.pdf
oder http://user.fh-frankfurt.de/~rewolf/LGnepo/interpol.pdf

Ich danke euch.
Mit freundlichen Grüßen

Julia K.


[code]
/*
** Parabel.c
**
** Simple Bezier curve drawing program.
**
** The following keyboard commands are used to control the
** program:
**
** q - Quit the program
** c - Clear the screen
** b - Draw Approximation curves
** i - Input control points
** p - Draw control polygon
** m - Move control points
** a - Approxmitation with polynom
**
*/

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define MAX_CPTS 25 /* Fixed maximum number of control points */

GLfloat cpts[MAX_CPTS][3];
int ncpts = 0;
int key_Approcurve=0;
int key_Parabel=0;
int key_ctrlpoly=0;
int key_input=2;
int key_points=0;
int indx;

static int width = 300, height = 500; /* Window width and height */

void drawAppro()
{
/* Draw the curve using OpenGL evaluators */
int i;
float b,m,sxy,sx,sy,sx2,xmin,xmax,ymin,ymax;
glColor3f(1.0,0.0,0.0);
sx=0;
sy=0;
sxy=0;
sx2=0;

for (i = 0; i < ncpts; i++)
{
sx = sx + cpts[i][0];
sy = sy + cpts[i][1] ;
sxy = sxy + cpts[i][0] * cpts[i][1] ;
sx2 = sx2 + cpts[i][0] * cpts[i][0];
}
m = (ncpts * sxy - sx*sy) / (ncpts * sx2 - sx *sx) ;
//b = (ncpts * sx2 * sy - sx * sxy) / (ncpts * sx2 - sx *sx) ;
b=sy/ncpts-m*sx/ncpts;

xmin = cpts[0][0] ;
for (i = 1; i < ncpts; i++)
{
if(cpts[i][0] < xmin)
xmin = cpts[i][0];
}
xmax = cpts[0][0] ;
for (i = 1; i < ncpts; i++)
{
if(cpts[i][0] > xmax)
xmax = cpts[i][0];
}

xmin=xmin-1;
xmax=xmax+1;
ymin = m * xmin + b;
ymax = m * xmax + b;


glBegin(GL_LINES);
glVertex2f (xmin,ymin);
glVertex2f (xmax,ymax);
glEnd();
glFlush();
}

void drawParabel()
{
/* Draw the curve using OpenGL evaluators */
int i,k,m,n=2,l,x[11],r;
float a[11][11], s, rs[11];
glColor3f(1.0,0.0,0.0);

// links
for (k = 0; k <= n; k++)
{
for (m = 0; m <= n; m++)
{
s=0;
for (l = 0; l <ncpts; l++)
{
s = s + pow(x[l], k + m );
}
a[k][m] = s;
}
}

// rechts

for (m = 0; m <= n; m++)
{
s=0;
for (l = 0; l <ncpts; l++)
{
s = s + pow(x[l], k + m ) * cpts [l] [1];
}
rs[m]=s;
}

// matrix

for (k = 0; k <= n; k++)
{
for (m=k+1; n <= n; m++)
{
a[k][m]=a[k][m]/a[k][k]; /*(* = lkm *);*/
for (l=m+1; l<=n; l++)
{
a[k][l]=a[k][l]-a[k][m]*a[m][l]; /* = a[m]km *); */
}
}
}




glBegin(GL_LINES);
// glVertex2f (xmin,ymin);
// glVertex2f (xmax,ymax);
glEnd();
glFlush();
}

void drawPoly()
{
int i;
glColor3f(0.0,0.0,1.0);
glLineStipple(1,0x00FF);
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);
for (i = 0; i < ncpts; i++)
glVertex3fv(cpts[i]);
glEnd();
glDisable(GL_LINE_STIPPLE);
}

void drawPoints()
{
int i;
glColor3f(0.0,0.0,0.0);
glPointSize(5.0);
glBegin(GL_POINTS);
for (i = 0; i < ncpts; i++)
glVertex3fv(cpts[i]);
glEnd();
}


/* This routine displays all */
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
if(key_points==1)
drawPoints();
if(key_Approcurve==1)
drawAppro();
if(key_Parabel==1)
drawParabel();
if(key_ctrlpoly==1)
drawPoly();
glFlush();
}
void move(int x,int y)
{
float wx,wy;
wx = (2.0 * x) / (float)(width - 1) - 1.0;
wy = (2.0 * (height - 1 - y)) / (float)(height - 1) - 1.0;
cpts[indx][0]=wx;
cpts[indx][1]=wy;
display();
}


/* This routine inputs new control points */
static void mouse(int button, int state, int x, int y)
{
float wx, wy;
int i,found;

/* We are only interested in left clicks */
if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN)
return;
if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN) && (key_input==1))
{
/* Translate back to our coordinate system */
wx = (2.0 * x) / (float)(width - 1) - 1.0;
wy = (2.0 * (height - 1 - y)) / (float)(height - 1) - 1.0;
/* See if we have room for any more control points */
if (ncpts == MAX_CPTS)
return;
/* Save the point */
//printf("\n%d",ncpts);fflush(stdout);
cpts[ncpts][0] = wx;
cpts[ncpts][1] = wy;
cpts[ncpts][2] = 0.0;
ncpts++;
glutPostRedisplay();
}
if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN) && (key_input==0))
{
i=-1;
found=0;
while((i<(ncpts-1)) && (found == 0))
{
i++;
//printf("\n index=%d, found= %d,%4d,%4d",i,found,x,y);fflush(stdout);
wx = (2.0 * x) / (float)(width - 1) - 1.0;
wy = (2.0 * (height - 1 - y)) / (float)(height - 1) - 1.0;
if((fabs((double)(wx-cpts[i][0]))<0.1) && (fabs((double)(wy-cpts[i][1]))<0.1))
{
found = 1;
indx = i;
}
}
if(found == 1)
{
glutMotionFunc(move);
}
}
}


/* This routine handles keystroke commands */
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 'q': case 'Q':
exit(0);
break;
case 'c': case 'C':
ncpts = 0;
key_Approcurve=0;
key_Parabel=0;
key_ctrlpoly=0;
key_input=0;
key_points=0;
glutPostRedisplay();
break;
case 'b': case 'B':
key_Approcurve=1;
key_input=0;
glutPostRedisplay();
break;
case 'a': case 'A':
key_Parabel=1;
key_input=0;
glutPostRedisplay();
break;
case 'p': case 'P':
if(key_ctrlpoly==0)
key_ctrlpoly=1;
else key_ctrlpoly=0;
key_input=0;
glutPostRedisplay();
break;
case 'i': case 'I':
key_input=1;
key_points=1;
break;
case 'm': case 'M':
key_input=0;
break;

}
}

/* This routine handles window resizes */
void reshape(int w, int h)
{
width = w;
height = h;

/* Set the transformations */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, w, h);
}

int main(int argc, char **argv)
{
printf("TEST");/* Intialize the program */fflush(stdout);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(width, height);
glutInitWindowPosition(600,50);
glutCreateWindow("APPROXIMATION CURVES");
glEnable(GL_MAP1_VERTEX_3);
glClearColor(1.0, 1.0, 1.0, 1.0);

/* Register the callbacks */
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
[/code]


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 07, 2009 05:50 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Also 1. gibt es in diesem Forum eine Code-Funktion, damit könntest du deinen Quelltext ordentlich darstellen.
2. ist es nicht die feine englische Art die Leute zu fragen, ob sie dein Programm zu Ende schreiben, eigentlich läuft das eher so ab, dass man sagt, wieweit man kam, seine Ansätze zeigt und einem dann auch geholfen wird.
3. ist es GANZ UND GARNICHT die feine englische Art Crossposting zu betreiben. Deine Art des Crossposting ist mir sogar gänzlich neu: Einfach an existierende Threads deine Frage ranhängen. :shock: Wenn jemand dir helfen will (was ich nun bezweifle bei so viel Dreistigkeit), dann würde ich er das hier tun. Crossposting sind unnötig und nervig - in deinem Fall besonders nervig und dreist.

Denk mal über die Regeln nach, die so ein Forum hat und die hier sicherlich auch gut findbar stehen. Du willst hier etwas von den Leuten hier, also ist es nicht zu viel verlangt, sich VORHER mal mit den Regeln und Gepflogenheiten auseinanderzusetzen.

Ziz

PS: Achja, Threadnamen in Großbuchstaben mit einer Armada von Ausrufezeichen und ohne jeglichen inhaltlichen Bezug zum Thread sind auch ein No Go.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 07, 2009 08:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo Julia,

in diesem Forum nehmen wir alle Themen ernst und versuchen Fragen so zeitnah wie möglich zu beantworten. Das teils sogar mit erheblichen privatem Zeitaufwand. Allerdings bin ich nicht gewillt eine solche Posttaktik zu akzeptieren. Wie Ziz schon gesagt hat sind wird nicht da um Dinge von Anderen zu erledigen sondern um bei Fragen/Problemen behilflich zu sein bzw. Denkanstöße zu geben etc. Aber damit wir das auch tun können brauchen wir mehr als "bitte helft" und einen batzen Code. Besonders bei Code ist weniger meist mehr. Und eine genaue Beschreibung deines Problemes ist nie verkehrt. Außerdem haben Foren es so an sich, dass man dort diskutiert und nicht per Mail.

Entsprechend werde ich dieses Thema jetzt auch schließen und ich bitte dich ein neues Thema zu erstellen. Dann aber mit einem sinnvollen Titel und einer etwas aussagekräftigeren Problembeschreibung. Und vielleicht mit einem extrakt der wichtigen Codestellen.

PS: Damit nicht der falsche Eindruck entsteht. Wir helfen gern. Aber ein bisschen was sollte schon auch von deiner Seite kommen.


viele Grüße

Lossy


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]