AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fläche berechnen

Ein Thema von Eggimaa · begonnen am 12. Aug 2004 · letzter Beitrag vom 17. Aug 2004
Antwort Antwort
Eggimaa

Registriert seit: 17. Jun 2004
15 Beiträge
 
#1

Fläche berechnen

  Alt 12. Aug 2004, 10:20
Hallo Leute
Ich hab da mal wieder ein Problem.
Ich habe von einem 3D-Körper die Projektionen in die XY, XZ und YZ Ebene. (Parallelprojektion).
(als Grafik!!)
Wie kann ich nun jedem Punkt der Ebene XY seine Höhe Z zuordnen??


Danke für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Fläche berechnen

  Alt 14. Aug 2004, 09:38
Hab mich mit 3d Figuren noch nicht auseinandergesetzt. Vielleicht verstehe ich deine Frage auch nicht richtig, aber würde dir vielleicht ein 3d Array helfen?
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#3

Re: Fläche berechnen

  Alt 14. Aug 2004, 10:01
Soll dein Programm aus 3 Grafik-Dateien (3 Ansichten eines Körpers) einen 3D-Körper erstellen? Verstehe ich dich da richtig? Das wäre dann nicht so einfach! Zeig mal ein Beispiel!

Jens
Jens-Uwe Horn
  Mit Zitat antworten Zitat
digleu

Registriert seit: 28. Okt 2003
Ort: Alfter, das dach der Welt
16 Beiträge
 
#4

Re: Fläche berechnen

  Alt 14. Aug 2004, 17:42
bevor ich mir jetzt ein Blatt Papier nehme und anfange ein wenig mein, durch übermäßigen Genussmittelgenuß schon stark verdunkeltes, Wissen über Vektorrechnung rauszukrame möchte ich nur fragen ob ich dich richtig verstanden habe:
Du hast eine Grafik von der Projektion in die XY-Ebene. Sind die Punkte in dieser Ebene dann durchnummeriert und lassen sich in den anderen Projektionen so eindeutig zuordnen oder muss das das Programm auchnoch machen? Dann soll für jeden Punkt auf der XY-Grafik die zugehörige Z-Komponente berechnet werden. Hast du die Ebenen (bzw. die (Projektions-)Punkte auf diesen) denn schon als (2d)-Arrays vorliegen oder musst du auchnoch die Graphiken zu solchen umwandeln? Kann ich mal 3 Beispielgraphiken sehen??

lg Lars
  Mit Zitat antworten Zitat
Tabak

Registriert seit: 10. Jul 2004
10 Beiträge
 
#5

Re: Fläche berechnen

  Alt 16. Aug 2004, 23:54
Ich hab mal das hier gemacht und hoffe es kommt deinen Vorstellungen nahe: http://www.8ung.at/tabak/Delphi/Delphi.JPG
Mal angenommen du siehst nur Bild 1, dann ist es unmöglich zu sagen auf welcher "Höhe" sich der Punkt befindet, da man ja nicht mal erkennen kann ob er sich auf der Ober oder Unter-seite der Kugel befindet. Wie das auf einem "flachem" Gegenstand aussieht weiß ich nicht , aber vielleicht kann dir jetzt ein anderer weiter helfen...
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Fläche berechnen

  Alt 17. Aug 2004, 00:42
[ot]Hey Tabak! Das sieht aus wie mein lieblings-C4D [/ot]

Zum Thema:
Hab grad google heftigst durchforstet und bin auf keine Standardlösung gestoßen.
Das wird wahrlich nicht einfach. Ein Problem ist z.B. dass du evtl. Feinstrukturen nicht mehr extrahieren kannst, die bei der Projektion unwiederbringlich verloren gegangen sind. Aber auch "nur" die 3 Ansichten zu vereinen ist nicht wirklich einfach, da du ja vermutlich eine (mathematisch) willkürliche Form vorliegen hast. Zudem ist bei einer Kugel das Verhalten von Flächen zu Volumina deutlich anders als z.B. bei Würfeln, und von daher kann's schwierig werden, da sich da keine allgemeine Gesetzmäßigkeit finden lässt.
Die einzige Möglichkeit besteht darin, aus den Projektionen wieder einen 3D-Körper zu machen. In diesem Fall einen Datenwürfel, also im Wesentlichen eine Voxel-Ansammlung. Dann kannst du die Voxel zählen (die Voxelauflösung müsste dann fest sein um ein Standardmaß zu erhalten), und die Anzahl der zum Körper gehörenden Voxel machen das Volumen aus.
Der eigentlich schwere Schritt ist die Berechnung eines Datenwürfels anhand der Seitenansichten - hab ich spontan keine Lösung für parat, aber das sollte sich (hoffe ich) mit etwas Hirnschmalz machen lassen.

Hoffe das hilft ein wenig,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Fläche berechnen

  Alt 17. Aug 2004, 09:59
Im allgemeinen braucht man für Oberflächenberechnungen im 3D oder mehr die Integralrechnung...
Da das sicherlich zu schwer wird musst Du auf Sonderfälle zurückführen. Bei einer Kugel
und Würfeln und so stehen die Formeln im Tafelwerk. Sobald Du jedoch unregelmäßige Körper hast brauchst Du genaues
Wissen über Splines, Bogendifferenzial und Umlaufintegrale. Sollte da noch Informationsbedarf bestehen hätte ich
noch ein paar Blätter von meinem Prof...

[edit] Nachdem ich das geschrieben hatte wird mir irgendwie klar das ich die Frage genau andersrum beantwortet hab! Sorry [/edit]
Thomas
  Mit Zitat antworten Zitat
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#8

Re: Fläche berechnen

  Alt 17. Aug 2004, 20:00
Also wenn ich dein Problem richtig verstehe, möchtest programmtechnisch aus 3 Parallelprojektionen (vermutlich Bitmap-Grafiken o.ä.) von (wie auch immer gearteten) Körpern ein 3D-Modell des Körpers generieren. Dabei stößt du auf die folgenden Probleme:

1. Du möchtest jedem Punkt der XY-Ebene einen Z-Wert zuordnen. Das ist so für Körper nicht machbar, da jedem Punkt der XY-Ebene immer mindestens 2 Z-Werte zugeordnet werden müssten (Ober- und Unterseite). Bei "eingestülpten" Körpern wären es sogar mehr als 2 (z.B. 4 oder 6...) Z-Werte.

2. Dein Programm müsste sich aus den einzelnen Ansichten die jeweils ablesbaren Koordinaten der einzelnen Oberflächenpunkte zusammensuchen. Aufgrund der Verdeckung großer Oberflächenabschnitte sind aber nur die wenigsten Punkte in allen 3 Ansichten zu sehen. Ausreichen würde auch, wenn jeder Punkt in mindestens 2 Ansichten sichtbar wäre, aber selbst das ist lange nicht bei allen Punkten der Fall. Dieses Problem würde sich einfacher gestalten, wenn der in den Ansichten dargestellte Körper ein "durchsichtiges" Netz wäre. Vielleicht ist das ja der Fall.

3. Für die Punkte, die man also in mindestens 2 Ansichten sieht, besteht jetzt noch das Problem, herauszufinden, wo sich ein Punkt der einen Ansicht in der 2. bzw. 3. Ansicht wiederfindet. Das ist für dich und mich relativ einfach, für dein Programm aber in den meisten Fällen sehr schwierig. Der Grund ist, dass die Punkte der Körperoberfläche sich vermutlich nicht sehr stark voneinander unterscheiden. Selbst, wenn der Körper kunterbunt ist, wird es deinem Programm sehr schwer fallen, z.B. einen hellroten Punkt in einer der anderen Ansichten zweifelsfrei wieder zu erkennen. Hierzu wären z.B. Programme mit künstlichen neuronalen Netzen in der Lage, da diese Oberflächenmuster wieder erkennen könnten. Problem dabei ist, dass diese Muster in den verschiedenen Ansichten
aus unterschiedlichen Richtungen auch unterschiedlich verzerrt zu sehen sind.

4. Wenn aber die Probleme 1 bis 3 gelöst wären, hättest du als ideales Ergebnis eine innen hohle 3D-Punktewolke. Also streng genommen noch immer keinen 3D-Körper. Aber ich will mal nicht noch weiter ins Detail gehen. Vielleicht hab ich ja auch deine Frage ganz falsch verstanden...

Zusammenfassend würde ich sagen, dass es - so wie ich deine Frage verstehe - wie ich schon sagte nicht so einfach ist. Aber frisch ans Werk! Einfach mit Problem 1 anfangen und dann langsam durchackern.

Gruß Jens
Jens-Uwe Horn
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: Fläche berechnen

  Alt 17. Aug 2004, 20:44
hmm, versteh ich das problem nicht, oder wie?

das einzige problem ist ja wohl, aus den 3 graphiken die koordinaten rauszukriegen

danach isses einfach

hier meine lösung:

Delphi-Quellcode:
procedure get3Dpoints(pxy, pxz, pyz: array[1..2,1..1000]; var p3d: array[1..3,1..1000]);
var
i:integer;
begin
for i:=1 to 1000 do
  begin
  p3d[1,i]:=pxy[1,i];
  p3d[2,i]:=pxy[2,i];
  p3d[3,i]:=pxz[2,i];
  end;
end;
da brauch man sogar nur 2 projektionen...

das problem ist jetzt, die koordinaten zu kriegen, aber das ist ja kein mathematisches problem, sondern eher ein farb-erkennungsproblem...

man könnte das so in etwa machen:

Delphi-Quellcode:
function getpoints(bild:TPicture):array[1..2,1..1000];
var
i, j, panz:integer;
points:array[1..2,1..1000];
begin
for i:=1 to bild.width do //breite
  for j:=1 to bild .heigth do //höhe
    begin
    if bild.Pixels[i,j]:=clBlack //wenn punkt bestandteil eines objektes
    then begin
         if ((bild.Pixels[i-1,j]) xor (bild.Pixels[i+1,j]))
             or ((bild.Pixels[i,j-1]) xor (bild.Pixels[i,j+1]))
             or ((bild.Pixels[i-1,j-1]) xor (bild.Pixels[i+1,j+1]))
             or ((bild.Pixels[i+1,j-1]) xor (bild.Pixels[i-1,j+1]))
         then begin //Wenn die linie nicht gerade über den punkt verläuft
              panz:=panz+1; //dann isser ein eckpunkt
              points[1,panz]:=i; //anzahl+1
              points[2,panz]:=j; //in array eintragen
              end;
         end;
    end;
getpoints:=points; //rückgabewert
end;
so, die if abfrage:

es wird geguckt ob die linie nicht gerade drüber verläuft
-> gerade drüber wäre statt xor immer and
-> wenns bei einer zutrifft reichts, daher or

es werden 4 richtungen geprüft:

nummer 1: -
nummer 2: |
nummer 3: \
nummer 4: /

man könnte das in ne schleife packen, aber das hab ich (noch) nicht parat...

ich hoffe das hilft erst mal
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz