Die Suche ergab 238 Treffer

von bbock
17.10.2024, 19:20
Forum: Programmierung
Thema: Raytracing
Antworten: 10
Zugriffe: 16455

Raytracing v3.0

Die Version 3.0 des Raytracing-Programms ist jetzt im Download-Bereich verfügbar. Sie erlaubt die Konfiguration der Szene mit Kameraposition und Position und Radien der Kugeln in einer Eingabedatei.

Raytracing v3.0
von bbock
06.10.2024, 14:45
Forum: Programmierung
Thema: Raytracing
Antworten: 10
Zugriffe: 16455

Raytracing v2.0

Version 2.0 bringt zwei neue Funktionen:
  1. Das Bild kann invertiert werden, was insbes. für einen Ausdruck (Hardcopy) hilfreich ist.
  2. Das Bild kann als PBM-Datei (Portable Bitmap) gespeichert werden.
Raytracing v2.0
von bbock
06.10.2024, 14:43
Forum: Programmierung
Thema: Raytracing
Antworten: 10
Zugriffe: 16455

Re: Raytracing

Die gewünschte stereoskopische Darstellung ("3D-Ansicht") kann man leicht erzeugen, indem man die Kamaraposition verändert. Das ist z.Z. nur durch Änderung des Programmcodes möglich, weil Kameraposition und Szene hartkodiert sind. D.h. man muss den Code ändern und neu kompilieren, was machbar, aber natürlich etwas umständlich ist. In v3.0 des Raytracing-Programms wird man die Szene, d.h. die Kameraposition und die Position und Radien der Kugeln in einer Szene-Datei konfigurieren können.
von bbock
24.09.2024, 17:54
Forum: Programmierung
Thema: Raytracing
Antworten: 10
Zugriffe: 16455

Raytracing

Raytracing ist ein Verfahren zum Generieren fotorealistischer Bilder auf einem Computer. Unmöglich auf einem Z80-Rechner, der nicht mal Graustufen unterstützt, geschweige denn Farbe? Nun, seht selbst:

Raytracing Download
von bbock
23.09.2024, 09:50
Forum: Hardware
Thema: Umfrage: Sammelbestellung interne CF-Card Joyce
Antworten: 7
Zugriffe: 3315

Re: Umfrage: Sammelbestellung interne CF-Card Joyce

Ich wäre an beiden Varianten interessiert, wenigstens als Bausatz (vielleicht finde ich ja noch jemanden, der mir das zusammenlöten mag :) ).

Wie wäre die CF-Karte denn formatiert? Ich nehme mal an, im CP/M-Format? Dann würde mich interessieren, wie man sie vom PC aus am besten mit Daten befüllt.
von bbock
22.12.2023, 13:59
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 59
Zugriffe: 75446

Re: BASICODE in Java

Damit das Programm auch von Laien leichter zu bedienen ist, wäre eine Menüzeile mit mind. einem File / Open sehr wünschenswert um die BasiCode-Datei in einer File Selection Box auszuwählen. Dann müsste man nicht mit der Kommandozeile herumhantieren, sondern könnte die JAR-Datei einfach per Doppelklick starten (ein installiertes Java 21 vorausgesetzt).

Derzeit muss man eine Shell bemühen (z.B. Windows cmd) und etwa

Code: Alles auswählen

<Pfad zu Java 21>\java -jar <Pfad zu basicode.jar>\basicode.jar <Pfad zur BasiCode-Datei>\<Dateiname>.bas
eintippen. Natürlich kann man den <Pfad zu Java 21> weglassen, wenn die Umgebungsvariablen korrekt gesetzt sind. Ebenso kann man <Pfad zur BasiCode-Datei> weglassen, wenn man sich bereits in dem Verzeichnis befindet, in dem sich die Datei basicode.jar befindet. Sollte dort auch <Dateiname>.bas zu finden sein, dann kann man <Pfad zur BasiCode-Datei> auch noch weglassen. Der kürzeste Aufruf sieht dann wohl so aus:

Code: Alles auswählen

java -jar basicode.jar <Dateiname>.bas
Ich habe mal eine erste Version von basicode.jar zum Ausprobieren angehängt:
basicode.jar
(138.08 KiB) 867-mal heruntergeladen
von bbock
26.11.2023, 15:25
Forum: Programmierung
Thema: BASICODE in Java
Antworten: 59
Zugriffe: 75446

Re: BASICODE in Java

Wie ist denn der aktuelle Stand? Sind mittlerweile alle gültigen BASICODE-Befehle abgedeckt?

Natürlich erwarte ich nicht, dass schon alles fehlerfrei funktioniert. Ich habe die beiden simplen Testprogramme hello.bas und scroll.bas erfolgreich ausführen können. Dann habe ich mich an etwas Größeres gewagt, nämlich das Programm zur Darstellung von Peano-Kurven, das Thomas hier eingestellt hat. Es bricht mit folgendem Fehler ab:
Exception in thread "main" java.lang.IllegalStateException: line not found: 20
at de.haupz.basicode.ast.ProgramNode.resolveJump(ProgramNode.java:57)
at de.haupz.basicode.ast.ProgramNode.run(ProgramNode.java:37)
at de.haupz.basicode.Main.run(Main.java:33)
at de.haupz.basicode.Main.main(Main.java:49)
von bbock
03.09.2023, 17:35
Forum: Programmierung
Thema: Fragen und Antworten zum C-Kurs
Antworten: 108
Zugriffe: 105284

Re: Fragen und Antworten zum C-Kurs

Da hat wohl die Implementierung der printf-Funktion ein Problem mit Strings, die länger als 32.767 Zeichen sind. Das ist wohl ein Bug in der library.
Wenn du den Code folgendermaßen änderst, dann geht's:

Code: Alles auswählen

...
  char *p;
 
  printf("Wieviele Sterne? ");
  scanf("%u", &i);
 
  buffer = (char*) malloc(i + 1);  // ein Byte extra für das String-Ende-Zeichen
  if (buffer != NULL) {            // sonst haben wir keinen Speicher bekommen
    buffer[i] = '\0';              // String-Ende-Zeichen setzen

    while(i--) {
      buffer[i] = '*';             // String mit Sternchen füllen
    }

//    printf("%s\n", buffer);
    p = buffer;
    while (*p != '\0') {
        putchar(*p++);
    }
    putchar('\n');

    free(buffer);                  // Wichtig! Speicher wieder freigeben
...
von bbock
03.09.2023, 16:24
Forum: Programmierung
Thema: Fragen und Antworten zum C-Kurs
Antworten: 108
Zugriffe: 105284

Re: Fragen und Antworten zum C-Kurs

Paul hat geschrieben: 03.09.2023, 09:33 Und gleich noch eine Frage hinterher:
beim zweiten Beispiel hast die Variable ch global definiert.
Ich wollte sie natürlich gleich lokal definieren was der compiler nicht mag.
Um so größer war meine Verwunderung das der Compiler die unveränderte Zeile als globale Variable akzeptiert.
..,
Wenn du eine Variable lokal anlegst, also innerhalb einer Funktion, dann legt sie der Compiler auf dem Stack an (es sei denn, du deklarierst sie als static). Damit bekommt jeder Funktionsaufruf seine eigenen lokalen Variablen, wodurch z.B. Rekursion ermöglicht wird. Der Speicherplatz wird zur Laufzeit beim Funktionsaufruf durch Ändern des Stack Pointers (dem Z80-Register SP) reserviert und am Ende der Funktion wieder freigegeben (abermals durch Ändern des Stack Pointers). Man spricht auch von "automatischen Variablen". Sie haben naturgemäß keine festen Adressen, da sie vom Inhalt des Stack Pointers abhängen. Ergo macht die Zuordnung einer festen Speicheradresse keinen Sinn und der Compiler quittiert den Versuch mit einer Fehlermeldung.
Globale Variablen werden vom Compiler zur Compile-Zeit festen Speicheradressen zugeordnet (dasselbe gilt für static-Variablen). Während des Programmlaufs ändern diese sich nicht mehr. Hier macht es also Sinn, dem Compiler eine feste Adresse mit '@* vorzugeben. Diese verwendet er dann anstelle der Adresse, die er ohne '@'-Klausel automatisch ermittelt hätte.