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

Aktuelle Zeit: Di Mai 14, 2024 19:19

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 11:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich versuch grad mein Mesh um paar Vertecs zu erweitern, das es net ganz so eckig aussieht, aber ich bekomm die Koordinaten vom dem neuen Vertex net raus. Ich hab mir folgendes dazu überlegt:
Bild

Und da hab ich jetzt n Gleichungssystem mit 4 Unbekannten un da komm ich ne weiter. Is das so überhaupt der richtige Ansatz, oder muss man doch anders an die Sache ran gehen? Kann mir da jmd helfen?

MfG & Thx Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 12:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Was du wohl suchst ist eine Interpolation von Punkten. :)
Da ist dieser Artikel recht interessant: http://de.wikipedia.org/wiki/B%C3%A9zierkurve


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 12:37 
Offline
DGL Member

Registriert: So Jun 23, 2002 12:37
Beiträge: 144
Programmiersprache: C/C++, Delphi
Hier ist eine nette Methode zur Interpolation beschrieben, die schöne Ergebnisse liefert und auch noch recht leicht zu implementieren ist(selbst schonmal gemacht).

Dort gibt es auch ein Java-Applet in dem du Stützpunkte setzen und dir anschließend die Ergebnisse verschiedener Interpolationsmethoden anschauen kannst.

Ansonsten könnten kubische Splines und Tesselation noch Schlagwörter für dich sein.

_________________
--->ladida<---


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Für den Fall das du nicht auf eine Vorgefertigte interpolation zurückgreifen willst einige Anmerkungen zu deinem Ansatz :

Was mir bei deinem Ansatz auffält du hast weder direkt noch indirekt
|V| angegeben von daher ist es kein wunder, dass du ein derartiges Geleichungssystem erhälts, denn deine Angaben reichen nicht aus.

Um es anders auszudrücken wo gibts du den die Information um wie viel das ganze runder sein soll.

Mölichkeiten eine derartige Angabe einzubauen wären :

|V| in Abhängigkeit von |V1V2| zu definieren
den von V1V und V1V3 eingeschlossenen Winkel angeben

Ich bin mir zwar nicht sicher aber, wenn ich deinen Ansatz richtig verstehe liegen alle Vektoren die du gegeben hast bzw. errechnen willst auf einer Ebene vielleicht hilft dir das weiter.

mfg FrenK


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Das Stichwort "Subdivision" sollte dir weiter helfen.
z.B. http://en.wikipedia.org/wiki/Subdivision_surface

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Di Dez 22, 2009 20:13 
Offline
DGL Member

Registriert: So Jun 23, 2002 12:37
Beiträge: 144
Programmiersprache: C/C++, Delphi
Zitat:
Was mir bei deinem Ansatz auffält du hast weder direkt noch indirekt
|V| angegeben von daher ist es kein wunder, dass du ein derartiges Geleichungssystem erhälts, denn deine Angaben reichen nicht aus.

Um es anders auszudrücken wo gibts du den die Information um wie viel das ganze runder sein soll.


Im Grunde wird schon angegeben wie "rund" das ganze werden soll. Durch Einbeziehung der Normalen an den Stützstellen wird sichergestellt, dass die Kurve stetig bleibt (was ja für den "runden Effekt" wichtig ist). Alles was die Werte dazwischen betrifft wird von der Interpolation an sich festgelegt (anders gesagt: Kennst du |V| bzw. |VV3| ist die ganze bisherige Überlegung hinfällig, die neuen Punkte wären ja schon bekannt)

@Bergmann89:
Dein Ansatz ist gut, sinnvoll wäre evtl. eine Parametrisierung, wenn du deine Strecken nicht nur halbieren willst.

_________________
--->ladida<---


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mesh aufblasen
BeitragVerfasst: Mi Dez 23, 2009 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab mich jetzt bisl an den CubicSplines orientiert un dann is mir die Lösung eingefallen. Ich stell einfach ne Funktion 3. Grades auf, mit der ich den den y Wert zwichen den 2 Punkten berechnen kann. Und dieser y-Wert ist dann die Länge des Vektors(V3-V) oder anders gesagt: V = V3 + y*N. Hier nochma die Formeln:
Bild
Code:
  1. function glBlowupMesh(V1, V2, N1, N2: TGLVector3f): TGLNormalVec3f;
  2. var V1V2, V2V1, B1, B2, T1, T2: TGLVector3f;
  3. var P1, P2: array[0..1] of Single;
  4. var a, b, c, m1, m2, x, y: Single;
  5. begin
  6.   result.N[0] := (N1[0]+N2[0])/2;
  7.   result.N[1] := (N1[1]+N2[1])/2;
  8.   result.N[2] := (N1[2]+N2[2])/2;
  9.   result.N := glNormalize(result.N);
  10.  
  11.   V1V2[0] := V2[0]-V1[0];
  12.   V1V2[1] := V2[1]-V1[1];
  13.   V1V2[2] := V2[2]-V1[2];
  14.  
  15.   V2V1[0] := V1[0]-V2[0];
  16.   V2V1[1] := V1[1]-V2[1];
  17.   V2V1[2] := V1[2]-V2[2];
  18.  
  19.   P1[0] := 0; P1[1] := 0;
  20.   P2[0] := glVecLength(V1V2); P2[1] := 0;
  21.  
  22.   B1 := glNormalize(glVectorProd(N1, V1V2));
  23.   B2 := glNormalize(glVectorProd(N2, V2V1));
  24.  
  25.   T1 := glNormalize(glVectorProd(N1, B1));
  26.   T2 := glNormalize(glVectorProd(N2, B2));
  27.  
  28.   m1 := -tan(glVecAngle(T1, V1V2));
  29.   m2 := tan(glVecAngle(T2, V2V1));
  30.  
  31.   a := (m1+m2)/(P2[0]*P2[0]);
  32.   b := (-2*m1-m2)/P2[0];
  33.   c := m1;
  34.  
  35.   x := P2[0]/2;
  36.   y := (a*x*x*x + b*x*x + c*x);
  37.  
  38.   result.V[0] := V1[0] + V1V2[0]/2 + result.N[0]*y;
  39.   result.V[1] := V1[1] + V1V2[1]/2 + result.N[1]*y;
  40.   result.V[2] := V1[2] + V1V2[2]/2 + result.N[2]*y;


Um die Parametersierung kümmer ich mich später, ich muss jetzt erstma gucken wie ich die Triangles neu berechne, die Vertecs hab ich ja jetzt...

MfG & Thx Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.041s | 19 Queries | GZIP : On ]