![]() |
mem aus TurboPascal
Hi Leutz!
Ich bin vor kurzem im Internet auf eine Facharbeit zum Thema computergenerierte Hologramme gestoßen, bei welcher auch der dazugehörige Pascalcode dabei ist. Da ich auch mal in TurboPascal programmiert hab, dachte ich mir, ich portiere das Ganze auf Delphi. Doch dann bin ich leider an dem Array "mem" hängen geblieben, von dem ich nicht weiß, wie ich das am klügsten in Delphi schreibe. :( MfG, Sven |
Re: mem aus TurboPascal
Fragst du wie man das Array deklarieren soll?
Wie ist das Array denn im Pascal Code deklariert? Ist das ein dynamisches Array?
Delphi-Quellcode:
oder ein statisches?
var
mem: array of string;
Delphi-Quellcode:
Florian
var
mem: array[0..100] of string; |
Re: mem aus TurboPascal
Das Array ist eines, das von Pascal zur Verfügung gestellt wird. Ich schau mal schnell, ob ich irgendwo noch Pascal rumkurven hab... (wegen der Hilfe) :?
Im übrigen gibt's dynamische Arrays erst ab Delphi 4... ;) |
Re: mem aus TurboPascal
Delphi-Quellcode:
Vergesse ich manchmal, da ich nie richtig mit einer Delphi Version unter 7.0 gearbeitet habe.
Im übrigen gibt's dynamische Arrays erst ab Delphi 4...
Welche Werte stehen denn in dem Array? |
Re: mem aus TurboPascal
Hab mal schnell die Pascal Hilfe ausgebuddelt:
Zitat:
|
Re: mem aus TurboPascal
Schein eine Zugriff auf den Speicher des Programms darzustellen. Da kenne ich mich leider nicht aus. Ich denke aber mit einem MemoryStream dürfte man das ähnlich handhaben können.
Florian |
Re: mem aus TurboPascal
Werd ich dann mal austesten... Danke soweit mal... :-D
|
Re: mem aus TurboPascal
Mem dient zum direkten setzen und lesen des Speichers. Z.B. :
Delphi-Quellcode:
Ist also wohl kaum zu empfehlen.
mem [$1000:$1009] := 5; oder MyVar := mem [$1000:$1009]
|
Re: mem aus TurboPascal
Zitat:
Mem wurde dazu benutzt, an bestimmten Speicheradressen Werte zu lesen und schreiben, häufig in den Videospeicher oder den Tastaturpuffer o.ä. Zeige mal die betreffenden Stellen im Quelltext, dann können wir dir ggf. sagen, was damit bezweckt wird und wie man es unter Windows abbilden kann. |
Re: mem aus TurboPascal
Aber gerne zeige ich die Stelle...
Delphi-Quellcode:
Ich hoff ich hab alle Consts, Vars und Types erwischt... und ich hoffe, dass ihr schlauer draus werdet, als ich.... :? die Daten die hier jetzt berechnet wurden sind zur Berechnung des Interferenz Bildes notwendig... doch das ist ne andere Geschichte... äh... Prozedur (musste sein) :wink:
(*
Legende: //...: Meine Kommentare {...}: Kommentare des Autors *) // globale Vars / Consts / Types const entf=40; {z-Koordinate des Objekts Std: 40} Staffelung=0; {z-Koordinatendifferenz von einem Buchstaben zum nächsten Std: 0} Wort='Laser'; wortx=0.08; worty=-0.17; {Koord. des Wortbeginns Std: 0.08, -0.17} breite=0.16; hoehe=0.17; {Größe eines 8*8 Bit Punkterasters Std: 0.16, 0.17} Abstand=0.17; {Buchstabenabstand Std: 0.17} type punkttyp=array[1..3] of real; vars p: array[0..200] of punkttyp; {Array zum Speichern d. Punktkoordinaten} punkte: integer; {Anzahl der Punkte für das Wort} // Das Objekt der Begierde ist diese Funktion.... function objekt: integer; {Wandelt die Zeichenkette in Punkteraster um} const segcg: word=$F000; ofscg: word=$FA6E; {Segment und Offsetadresse wo man das Rasterpunktmuster herauslesen kann} var i, j, bnr, r, sp: integer; {bnr: Buchstabennr; r: Reihe; sp: Spalte} asc, zbyte, zpot: byte; {asc: ascii-Code d. Zeiches; zbyte: Zeile d. binären Punkterasters; zpot: zur Kontrolle ob Bit gesetzt oder nicht} hstr: string; {Aktuelles Zeichen} begin punkte:=0; for bnr:=0 to length(wort)-1 do begin {Für jeden Buchstaben die Schleife durchlaufen} hstr:=copy(wort,bnr+1,1); {hstr: Aktueller Buchstabe} asc:=ord(hstr[1]); {asc: Ascii-Wert d. Buchstaben} for r:=0 to 7 do begin {jeder Buchstabe hat 8 Zeilen, wobei jede Zeile der Reihe nach ausgelesen wird} //Hier ist das Mem Zeugs if asc<128 then begin {diese Zeile auslesen} ofscg:=$FA6E; segcg:=$F000; zbyte:=mem[segcg:ofscg+8*asc+r]; end else begin ofscg:=mem[0:4*$1F]+256*mem[0:4*$1F+1]+8*(asc-128)+r; segcg:=mem[0:4*$1F+2]+256*mem[0:4*$1F+3]; zbyte:=mem[segcg:ofscg]; end; zpot:=128; {=10000000b} for sp:=0 to 7 do begin {Jedes Bit durchlaufen} if (zbyte and zpot)=zpot then begin {Falls Bit gesetzt dann Punkt speichern} inc(punkte); {Punktanzahl um eins erhöhen} p[punkte,1]:=wortx+abstand*bnr+sp*breite/8; {=Objektbeginn+ Zeichenabstand* Zeichen + Punktnummer*Zeichenbreite/8 (8 Punkte pro Zeichenzeile)} p[punkte,2]:=worty+r*hoehe/8; {Objektbeginn + Pixelreihe* Höhe/8} p[punkte,3]:=entf+staffelung*bnr; {Abstand in z-Richtung + Staffelung} end; zpot:=zpot div 2; {Einser in Binärzahl rückt um 1 Stelle nach rechts} end; end; end; objekt:=punkte; end; |
Re: mem aus TurboPascal
An Adresse F000:FA6E liegt seit Urzeiten in den PCs der 8x8 Standard-Rasterfont. Also z.B. für A die Bits:
Code:
Wenn ich das richtig verstehe, dann wandelt die Routine einfach den String "wort" in Einzelpunkte (Pixel), deren Koordinaten in dem Array "p" gespeichert werden.
.XXXXX..
XX...XX. XX...XX. XXXXXXX. XX...XX. XX...XX. XX...XX. ........ Wenn du das unter Windows nachbildest, dann kannst du es ggf. durch eine einfache Textausgabe in den Canvas ersetzen. |
Re: mem aus TurboPascal
Wieder was gelernt... Danke für die Hilfe :thumb:
Des wird bei nächstbester Gelegenheit ausgetestet, aber heut nemme *gähn* Ciao, Sven |
Re: mem aus TurboPascal
Gegenfrage:
wird hier das Interferenzmuster aus den Pixeln von Schriftzeichen gewonnen? Das sichtbar gemachte Hologramm zeigt dann räumliche Buchstaben? Wie macht man es sichtbar, wie bekommt man das Muster vom PC auf Holo-Filmmaterial? Die Version mit dem Canvas ist zwar schon mal nicht schlecht, aber man müsste dan jedes einzelne Zeichen genau lokalisieren. Am Besten gibt man jedes Zeichen eines Strings einzeln aus, dessen Position ist dann bekannt und man muss nur noch die Größe ermitteln. Kommt man irgendwie ohne solchen Umweg an die Font-Daten ran? |
Re: mem aus TurboPascal
Liste der Anhänge anzeigen (Anzahl: 1)
@tomsel: Entweder nimmst du überhaupt keinen Font sondern direkt eine Bitmap (siehe Anlage), oder du zeichnest den String in einen Schwarz/Weiß-Canvas und holst dir dann mit
![]() |
Re: mem aus TurboPascal
Liste der Anhänge anzeigen (Anzahl: 1)
ich denke mal es geht um das hier:
![]()
Delphi-Quellcode:
und
segcg: word=$F000; ofscg: word=$FA6E;
Delphi-Quellcode:
Ist das umwandeln eines 8x8-Zeichens, wie Flocke schon sagte.
ofscg:=mem[0:4*$1F]+256*mem[0:4*$1F+1]+8*(asc-128)+r;
segcg:=mem[0:4*$1F+2]+256*mem[0:4*$1F+3]; zbyte:=mem[segcg:ofscg];
Delphi-Quellcode:
Das ist wohl der wichtigste Teil der Procedur. Ich würde es auch so machen wie Flocke das vorgeschlagen hat. Zur Not kann man sich ja auch mit einem 8x8-Font wie zB. Terminal behelfen den man sich mit OutText auf den Canvas zeichnet und dan die Pixel einliest.
for sp := 0 to 7 do
begin {Jedes Bit durchlaufen} if (zbyte and zpot) = zpot then begin {Falls Bit gesetzt dann Punkt speichern} inc(punkte); {Punktanzahl um eins erhöhen} p[punkte, 1] := wortx + abstand * bnr + sp * breite / 8; {=Objektbeginn+ Zeichenabstand* Zeichen + Punktnummer*Zeichenbreite/8 (8 Punkte pro Zeichenzeile)} p[punkte, 2] := worty + r * hoehe / 8; {Objektbeginn + Pixelreihe* Höhe/8} p[punkte, 3] := entf + staffelung * bnr; {Abstand in z-Richtung + Staffelung end; zpot:=zpot div 2; {Einser in Binärzahl rückt um 1 Stelle nach rechts} end; |
Re: mem aus TurboPascal
Genau die Facharbeit meinte ich :shock:
@tomsel: Falls du noch nicht nachgeschaut hast: Aus den Pixeln und einer Entfernung wird das Interferenzmuster berechnet... dieses muss dann abfotografiert und der Film (vorzugsweise schwarz/weiß) dann zu einem Dia entwickelt werden. Dieses kann man dann mit einem Laser (Laserpointer genügt angeblich auch) bestrahlen und man erhält ein (primitives) Hologramm... zumindest laut Autor und einigen anderen Internetquellen. :? |
Re: mem aus TurboPascal
ob das klappt? ein normales dia durfte kaum ausreichende auflösung bieten. dazu braucht man spezielles, holographie-material. außerdem brauchst du einen optischen tisch, der absolut stabil und erschütterungsfrei laser, eine streulinse und das hologramm aufnimmt. na ja, vielleicht geht es dir auch nur um die programmierung.
gruß tomsel |
Re: mem aus TurboPascal
Naja, sowohl dieser Autor, als auch andere hatten auf diese Weise schon Erfolg. Die so entstehenden Holgramme sind zwar nicht so gut, wie Hologramme auf Spezialfilmen/-platten, aber sie funktionieren laut diesen Leuten...
Mir ging es eigentlich weniger ums programmieren, sondern um den Geschwindigkeitstest :-D |
Re: mem aus TurboPascal
Geschwindigkeitstest ? Wozu das ? :shock: Habe auch größte Bedenken ein Hologramm mit einem Dia zu machen. Das geht nämlich nicht. Weil das hier angesprochene "Hologramm" überhaupt keins ist ! :lol:
Bei der angesprochenen Geschichte handelt es sich lediglich um eine räumliche Darstellung, siehe 3D Brille. Um ein Hologramm kann man aber auch herumgehen und es von der Seite betrachten (ohne Brille). mit einem auf Dia abfotografierten S/W Bild ist das nun mal nicht hinzukriegen. Wie so etwas aber aussehen könnte, das ist bisher nur auf dem Holodeck der Enterprise zu sehen. :mrgreen: |
Re: mem aus TurboPascal
Zitat:
Das geht schon. Ein solches Hologramm ist nichts Anderes als das auf Film aufgezeichnete Interferenzmuster des vom Objekt reflektierten Lichtes. Es gibt jedoch auch computergenerierte Hologramme, die nach dem gleichen Prinzip funktionieren, aber eben kein reales Objekt zur Grundlage haben. Sichtbar macht man es z. Bsp. durch Be- oder Durchleuchtung mit einem aufgeweiteten Laserstrahl, wobei durch Beugung des Lasers im Interferenzmuster die Original-Wellenfront des Objektes wieder hergestellt wird. Die Qualität hängt dabei von vielen Faktoren ab. Herumgehen kann man übrigens um kein Hologramm, auch nicht um die hochwertigsten Laser-Transmissionshologramme. Das erreicht man nur durch die Kombination hunderter Einzelhologramme, aber auch nur einigermaßen gut. Gruß tomsel |
Re: mem aus TurboPascal
Wenigstens einer, der versteht, wie das abläuft.. :mrgreen:
@Hansa: Geschwindigkeitstest meinte ich in Bezug auf die Berechnung des Interferenzbildes... der Autor hatte ja schließlich einen 166MHz PC mit 64 MB RAM... und ich hier einen AMD Athlon 64bit 3700 mit 1024 MB RAM... dezenter Unterschied :wink: Jaja... so Hologramme wie in Star Trek wären schon was *seufz*... aber ANGEBLICH (!!!) werden in Bezug auf holografisch anzeigbare Schaltflächen Erfolge verbucht. Aber selbst wenn das (noch) nicht der Fall ist, sollen ja in einigen Jahren die ersten Holodiscs mit 200GB Fassungsvermögen auf den Markt kommen :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz