Entwickler-Ecke

Off Topic - ascii-art


Boldar - Do 29.01.09 20:10
Titel: ascii-art
Hi Leute,
ich brauche einen Kreis bzw eine ellipse als ascii-art, der die folgenden anforderungen erfüllt:
___________________________________________________________
|-->es werden nur das zeichen + sowie leerzeichen verwendet |
|-->Die anzahl der spalten ist gleich der anzahl der zeilen gleich 64 |
___________________________________________________________

Aufgrund dieser Anforderungen wird es wohl eher eine ellipse werden, zumindest bei den normalen schriftarten wie courier...
Wie generiert man sowas oder hat jemand sowas??

mfg Boldar

Moderiert von user profile iconGausi: Ein paar _ entfernt


Jakob_Ullmann - Do 29.01.09 20:14

Du hast in der SB Brainfuck erwähnt. Willst du jetzt eine Lösung in Brainfuck oder Delphi? :P


Gausi - Do 29.01.09 20:16

Mal auf ein Canvas einen Kreis mit Durchmesser 64. Dann gehst du die Pixel durch: Bei schwarz kommt ein plus, bei weiß ein Leerzeichen ins Memo-Feld.


Boldar - Do 29.01.09 20:18

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Mal auf ein Canvas einen Kreis mit Durchmesser 64. Dann gehst du die Pixel durch: Bei schwarz kommt ein plus, bei weiß ein Leerzeichen ins Memo-Feld.


mh also an so eine einfache Lösung hbe ich noch garnicht gedacht... ok, danke

das einfachste übersieht man meistens...


Kha - Do 29.01.09 21:15

dx²+dy²<=r² finde ich jetzt nicht soo viel komplizierter. Vor allem funktioniert es im Gegensatz zu Canvas ;) : Bei 64x64 (also 0..63x0..63) ist der Mittelpunkt M(31,5|31,5). Das wird mit GDI schwierig :) . Aber je größer der Radius, dest weniger fällt dieser Fehler natürlich ins Gewicht.

user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
Du hast in der SB Brainfuck erwähnt. Willst du jetzt eine Lösung in Brainfuck oder Delphi? :P
Ich denke mal, er fügt das Ergebnis als BF-Code ein, fügt am Ende noch einen Punkt hinzu und teilt die Ausgabe dann durch r².

PS: Erinnert mich an http://www.dangermouse.net/esoteric/piet/samples.html -> "Pi" :D .


jaenicke - Do 29.01.09 21:19

Eine in BF umsetzbare Möglichkeit (ohne Winkelfunktionen :D) wäre diese, statt Abs könnte man einfach den Code für die vier Viertelchen einzeln schreiben, man kann aber natürlich auch das als Schleife schreiben: :mrgreen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TFormX.ButtonXClick(Sender: TObject);
var
  CurrentLine: string;
  i, j, x, y, Radius, Radius2, Diameter: Integer;
begin
  Diameter := StrToInt(EditDiameter.Text);
  Radius := Diameter div 2;
  Radius2 := Radius*Radius;
  for i := 0 to Diameter do
  begin
    CurrentLine := '';
    y := Abs(Radius - i);
    y := y*y;
    for j := 0 to Diameter do
    begin
      x := Abs(Radius - j);
      x := x*x;
      if Abs(x + y - Radius2) < 40 then
        CurrentLine := CurrentLine + '+'
      else
        CurrentLine := CurrentLine + '  ';
    end;
    MemoX.Lines.Add(CurrentLine);
  end;
end;