 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ernie
Anmeldungsdatum: 31.12.2004 Beiträge: 13
|
Verfasst am: 31.12.2004, 14:13 Titel: Vieleicht hat ja jemand eine gut Idee |
|
|
Also, ich versuche mal mein problem zu beschreiben, selbst das ist schon
nicht ganz einfach.
Ich versuche ein kleines Qbasic Programm zu schreiben, welches aus riesigen Zahlenkolonnen ein lauffähiges CNC Programm erzeugt.
Jeder kennt sicher Mosaikbilder. Wenn ich so ein Mosaikbild Berechnen lasse, dann habe ich eine CSV Datei der Füllmatrix. In dieser Datei steht an welcher Stelle, welche Farbe der Stein haben muss.
Ungefähr so;
47,38,45,33,..................22,34
.
.
22,45,55,..................22,33,67 u.s.w.
Diese Matrix kann aber jedes mal eine andere Anzahl von Seinen haben.
Wenn ich z.b. ein Mosaik von 400 mal 400 erstellen will, dann sind das schon
160000 Steine. Jetzt soll mein kleiner selbstgebauter Roboter dieses Mosaik anhand der Matrix legen. Da mein kleiner Rob. aber nicht so gross ist, das er das ganze Mosaik legen kann, muss die Füllmatrix auf 30 mal 30 Steine aufgeteilt werden so das er immer 900 Steine zu einer Fliese zusammenlegt.
Vielleicht hat ja irgend jemand eine Idee wie ich diese Masse an Zahlen bewältigen kann. Wie kann man die riesige Füllmatrix einlesen und automatisch jeder Zahl eine Variable zuweisen, so das ich diese Matrix auf 30 mal 30 Steine aufteilen kann?
Dann gibt es da noch ein paar Probleme mit der Farbcodeabfrage, an welcher Stelle liegt liegt welcher Stein ?
Und ein Problem mit der Magazinierung der Steine habe ich auch noch, aber
zuerst muss erst mal das Problem mit der Riesigen Matrix gelöst werden.
Also, ich danke schon mal im Voraus und ich bin für alle Vorschläge dankbar.
Gruss Enrico |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.12.2004, 15:33 Titel: |
|
|
Wie Du korrekt erkennt hast, ist das zu gross für ein zweidimensionales Array. Daher würde ich auf der Festplatte eine temporäre Direktzugriffsdatei (OPEN ... FOR BINARY AS) anlegen und mit SEEK arbeiten, d.h. Du bildest Dein Array als Datei ab.
Um das bei heutigen PCs grosszügig vorhandene RAM nutzen zu können, würde ich RAMDRIVE.SYS laden (MS-DOS 6.22; leider gibt es bei den neueren Windows-Versionen keinen gleichwertigen Ersatz dafür mehr) und in einer RAM-Disk diese Datei anlegen.
Der eine oder andere hier wird Dich wahrscheinlich auf eine EMS/XMS-Bibliothek verweisen; ich kann da nur auf CALL INTERRUPT(&H67, ...) verweisen. Siehe auch
http://www.ctyme.com/intr/rb-7432.htm _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
ant
Anmeldungsdatum: 21.12.2004 Beiträge: 3
|
Verfasst am: 31.12.2004, 15:58 Titel: |
|
|
Ich glaube, dass ist nicht das problem.
Du hast das Komplettmosaik ja schon in einer Datei abgelegt, richtig?
Du braucsht also nur noch die Mathematik um bestimmt bereiche aus dem Mosaik auszulesen.
Der einfachheit halber würd ich keine csv datei nehmen, sondern (vorrausgesetzt du hast nicht mehr als 256 verschiedene zustände) für jeden stein ein byte reservieren und dann den asciwert auf den wert setzen, den der steintyp hat.
Nun musst du bestimmte quadrate aus dem großen Mosaik rauslesen. Hier eine Anleitung wie ich das machen würde:
eine funktion xytoz(x,y) schreiben, die die kooardinaten in das byte umwandelt. Z.B.
(0,0) -> 1
(0,1) -> 2
formel wäre etwa dafür: (x+1)+y*steineprozeile
dann würde ich eine funktion schreiben, die dir quadrate aus der datei rausliest:
getquadratstein(stein,xstart,ystart)
etc. |
|
Nach oben |
|
 |
ernie
Anmeldungsdatum: 31.12.2004 Beiträge: 13
|
Verfasst am: 31.12.2004, 17:31 Titel: |
|
|
erst mal danke für die Antworten, ich werde die Varianten mal probieren.
Auf jeden fall habt Ihr mich auf eine richtig gut Idee gebracht.
Das Mosiakprogramm gibt mir nicht nur eine CSV Datei nach dem oben beschrieben Schema aus sondern es kann mir auch eine Textdatei mit der Füllinformation ausgeben, etwa so:
1,1,34
1,2,22
.
.
2,3,12
wobei die erste Zahl die Zeile, die 2. Zahl die Spalte und die 3. Zahl die Farbnummer darstellt. Das ich daran nicht gedacht habe.
damit müsste man doch mehr anfangen können als mit diese CSV Datei. Oder?
Allerdings ist so eine Textdatei wirklich ellen lang.
Vieleicht habt Ihr ja noch einen Vorschlag für eine Effizenze Formel wie ich diese grosse datei in 30 mal 30 zerhacken kann ?
das Problem ist, das die anzahl der Steine immer Variiert, das können mal 1000 mal 2000 Seine sein oder auch mal 200 mal 30.
Diese einzelnen Fliessen kann ich ja dann seperat, jede Fliese einzeln in eine Datei zur Späteren weiterverarbeitung auf Festplatte Speichern und Später einzeln aufrufen.
Vieleicht ist es ganz simpel, aber vor lauter grübeln und probieren hab ich jetzt ein wenig den überblick verloren. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|