Wie programmiere ich in Lazarus Häuser?

1 Antwort

Ich kenne mich nicht mit Lazarus aus, aber beim Zeichnen musst du so vorgehen, dass alle Positionen des Hauses immer in Abhängigkeit von einem Referenzpunkt (z.B. untere linke Ecke des Hauses) und des Streckfaktors gezeichnet werden:



Als Beispiel: Wenn du ein Quadrat der Kantenlänge 10 zeichnen willst:

line (0,0,10,0)
line (10,0,10,10)
line (10,10,0,10)
line (0,10,0,0)


Dieses Quadrat mit dem Referenzpunkt (x,y):

line (x,y,x+10,y)
line (x+10,y,x+10,y+10)
line (x+10,y+10,x,y+10)
line (x,y+10,x,y)


Und entsprechend mit einem Streckfaktor s:

line (x,y,x+10*s,y)
line (x+10*s,y,x+10*s,y+10*s)
line (x+10*s,y+10*s,x,y+10*s)
line (x,y+10*s,x,y)

Wenn du das entsprechend in eine Funktion/Prozedur verpackst, die dann abhängig vom Referenzpunkt und Streckfaktor das Haus dort in der Entsprechenden Größe zeichnet, dann hast du dein Ziel erreicht, wenn du die Funktion/Prozedur einfach entsprechend oft aufrufst. (z.B. oben mit kleinem Streckfaktor und unten mit großem.

Hilft das?

Nachtrag:
wenn du auch noch perspektivisch korrekt zeichnen möchtest, dann musst du dir zuerst einen Horizont festlegen und dann abhängig vom Abstand zum Horizont den Streckfaktor festlegen - eine sehr grobe Regel wäre:"Doppelter Abstand vom Horizont = doppelter Streckfaktor".

(Überlappungen ausser Acht gelassen)

Kann man mit Lazarus .exe Dateien erstellen?

Moin, ich überlege, ob ich die Programmiersprache Lazarus lernen sollte. Ich würde gerne wissen, ob man mit Lazarus auch EXE Dateien erstellen kann, die man auf anderen Rechenern, auf denen kein Lazarus vorhanden ist, auch ausführen kann. Danke im Vorraus für eure Antworten. Es wär auch schön, wenn ihr eure Meinung zu dieser Sprache schreiben könntet.

...zur Frage

Java Ellipse aus Linien zeichnen - Fehler wegen nur ganzzahlig möglichen Winkeln?

Hallo,

ich möchte in Java einen Farbkreis in Form eines Ellipse zeichnen; dafür zeichne ich Linien verschiedener Farben vom Mittelpunkt aus in einem bestimmten Winkel zum Endpunkt, der auf der imaginären Form einer Ellipse liegt. So weit so gut, das funktioniert auch.

Mein Problem allerdings ist, dass die Farbkreis-Ellipse nach dem Zeichnen ganz und gar nicht so aussieht, wie sie aussehen sollte:

Ich vermute, dass es daran liegt, dass die Berechnungen Gleitkommazahlen ergeben, die ich aber ganzzahlig runden muss, damit ich damit das Ende einer Linie als Punkt kennzeichnen kann. Dadurch liegen die Linien womöglich an manchen Stellen aufeinander und an anderen Stellen existieren keine Linien (ist das so?).

Hier der Code zum Definieren der Linien mit Farbe und Index:

Line[] lines = new Line[3*255]; 
int[] color = {255,0,0}; 
for(int i=0; i<3; i++) 
   for(int j=0; j<255; j++){ 
      color[i]--; color[(i+1)%3]++; 
      lines[i*255 + j] = new Line(i*255 + j + 1, new Color(color[0], color[1], color[2])); 
} 

Zeichne ich die Linien mit aufsteigender Länge nebeneinander, funktioniert der Farbübergang so wie geplant - nur die Farbellipse macht Probleme.

Hier der Konstruktor der Line-Klasse (mehr enthält sie mom. noch nicht):

Line(int index, Color color){
	this.index = index;
	this.color = color;
	this.angle = this.index*360./765; //3*255 Farben
    int a = Ellipse.a, b = Ellipse.b;
    double x = (a*b/Math.sqrt(b*b+Math.pow(a*Math.tan(angle), 2))),
           y = x*Math.tan(angle);
    if(angle > 90 && angle < 270) x = -x;
    this.end = new Point((int) x, (int) y);
    this.length = Point.distance(0, 0, end.x, end.y);
}

Die paint-Methode der Frame Klasse (ja, ich programmiere in Swing, die Ellipse ist eher ein quick&dirty-Projekt):

@Override public void paint(Graphics g){
	for(int i=0; i<3*255; i++){ 
       g.setColor(lines[i].color); 
       g.drawLine(m.x, m.y, lines[i].end.x+m.x, lines[i].end.y+m.y); 
    } 
} 

Warum sieht die gezeichnete Ellipse so grausam im Gegensatz zum Dreieck aus und separiert optisch so stark zwischen rot und blau? Woran liegt das bzw. wie kann ich es beheben?

Vielen Dank schon mal im Voraus.

LG

...zur Frage

Wie kann ich in Lazarus das kleine Einmaleins programmieren?

Ich soll das 1x1 in Lazarus programmieren, aber in der Delphisprache. Ich hatte in Lazarus schon ein paar kleine Sachen programmiert, jedoch habe ich keine Ahnung von Delphi. Kann mir jemand helfen? Danke schon mal im Voraus! :)

...zur Frage

Mensch-ärgere-dich-nicht in Pseudocode?

Hallo Community. Ich schreibe demnächst eine Informatik-Klausur und habe als Übungsaufgabe unter anderem folgende Aufgabe bekommen:


Beschreiben Sie in Pseudocode den Vorgang des ersten Würfelns beim Mensch ärgere dich nicht, also vor dem ersten Raussetzen bis zum Ende des ersten Zuges! Nutzen Sie die Befehle: - würfeln (gibt eine Zahl zwischen 1 und 6 zurück), - raussetzen, - rücken(n) (verlangt als Parameter die Anzahl der Felder um die gerückt wird - weitergeben (wenn der eigene Spielzug beendet ist) sowie die aus Pascal bekannten Schlüsselwörter für Programmstrukturen (begin, end, if ... then ... else ... usw.)! Verwenden Sie die Variablen AZ für die aktuelle Augenzahl und i für die Nummer des Wurfes.

_________________________________________________________

Wir haben sowas ähnliches schonmal im Unterricht gemacht, ich habe aber wieder vergessen wie das nochmal ging. Kann mir jemand helfen?

(Ich erwarte nicht, dass mir jemand diese Aufgabe komplett löst, ich hoffe, dass mir jemand Lösungsansätze geben kann.)

Danke :)

...zur Frage

Pascal: Taschenrechner und IF?

Hey. Ich programmiere gerade einen Taschen rechner mit der Programmiersprache Pascal und ich habe folgende probleme. 1. Wie macht man es so (insgesamt gibt es nur ein label für alles), dass man auf eine Kommastelle des ergebnisses rundet?Also befehle wie roundto was ich in google oft gesehen hab funktionieren nicht. 2.Wie macht man es das unentliche Zahlenketten berechnet werden können(also sowas wie 2+5+3+53+5+23) und wie macht man das, dass auch punkt vor strich beachtet wird? 3.Ist es möglich,dass man sogesehen programmiert: Wenn string1 gesetzt wurde, dann wird + gerechnet.

Prinzip meines Taschenrechners: Ein Label ist für die zahlen und die lösung (kann nicht geändert werden). Wenn ich die erste zahl eingebe und dann einen opperator drücke wird diese in einem string gespeichert und Label1,Caption ist leer. Zum Beispiel beim Plus rechnen ist es dann wenn ich " gleich " drücke : Label1.Caption:=floattostr(strtofloat(label1.caption)+strtofloat(string1));. Danke im Vorraus^^

...zur Frage

Java Spiel steigende Geschwindigkeit?

Hallo,ich programmiere gerade ein kleines Spiel in java und bräuchte etwas Hilfe.Ich habe eine bewegen Methode, die ein Objekt bewegt.Des weiteren habe ich noch eine tick Methode die 100 mal pro Sekunde tickt und damit die bewegen Methode ausführt nun möchte ich aber , dass mit dem erhöhen einer variable die geschwindigkeit erhöht wird und das möglichst linear                                                                                                                           public void tick(){    if(ii % jj  == 0){      bewegen();    }}                                 und jj wird verringert um die Geschwindigkeit zu erhöhen jedoch ist die Beschleunigung hierbei eher Exponentiell Ich hoffe jemand kann mir helfen.

...zur Frage

Was möchtest Du wissen?