Autor Beitrag
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 29.01.09 20:10 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 www.dangermouse.net/...ic/piet/samples.html -> "Pi" :D .

_________________
>λ=


Zuletzt bearbeitet von Kha am Do 29.01.09 21:22, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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;