AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Linien beim zeichnen anzeigen lassen

Ein Thema von Andy1811 · begonnen am 19. Apr 2015 · letzter Beitrag vom 24. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
Andy1811

Registriert seit: 19. Apr 2015
5 Beiträge
 
#1

Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 12:07
Hi Leute,
ich bin neu im Forum und generell erst seit einem halben Jahr (durch die Schule) in der Welt des Programmierens tätig.

Wir haben in der letzten Stunde die Aufgabe gehabt uns mit dem zeichnen von Linien auf ner Canvas auseinander zu setzten. Als erste Aufgabe gilt es nun das Haus vom Nikolaus zu implementieren und wer es als Hausaufgabe machen möchte, es so zu implementieren das man das "Programm" beim zeichnen sieht. Wer dies schaffen sollte und dann als erster (mit Angabe der Zeit und Unterschrift eines Lehrers) abgibt, bekommt 15Pkt( 1+ ).

Ich habe das HvN schon fertig implementiert, ohne Probleme, doch ich suche Vergebens nach der Antwort sich "das Zeichnen" anzeigen zu lassen.

Deswegen wende ich mich nun direkt an euch und möchte wissen, wie man so etwas implementieren kann...ich möchte keinesfalls den Quelltext von euch haben, da wir vermutlich das implementierte noch erklären müssen, sondern ich möchte nur gerne wissen, wie man es implementieren kann
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.526 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 12:44
Am Einfachsten in den dv nach jedem Strich eine kleine Verzögerung einbaust
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 13:46
Am Einfachsten in den dv nach jedem Strich eine kleine Verzögerung einbaust
Was dann zwar Spaghetticode gibt, aber es ist am Einfachsten umzusetzen.

Richtiger, aber etwas aufwändiger, wäre die Umsetzung mit einem Timer und einer Liste von Zeichen-Routinen. Pro Zyklus wird dann jeweils eine Routine ausgeführt (bzw. immer eine mehr). Das kann man dann langsam, schnell oder sogar manuell schalten (Timer aus und nur bei einem Klick auf einen Button, oder warauf auch immer).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Apr 2015 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 13:48
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: String;

  function GPI(p: String; n: Byte): Integer;
  var
   k: Integer;
  begin
    for k := 2 to n do
      if Pos(',', p) > 0 then
        Delete(p, 1, Pos(',', p) + 1)
      else
        Delete(p, 1, Maxint);
    if Pos(',', p) > 0 then
      Delete(p, Pos(',', p), Maxint);
    Result := StrToIntDef(p, 0);
  end;

begin
  with TStringList.Create, Canvas do
  try
    Add('0, 141, 415, 133, 286');
    Add('0, 133, 286, 265, 288');
    Add('0, 265, 288, 143, 410');
    Add('0, 143, 410, 270, 420');
    Add('0, 270, 420, 261, 291');
    Add('0, 261, 291, 207, 194');
    Add('0, 207, 194, 138, 281');
    Add('0, 138, 281, 268, 419');
    Add('0, 228, 228, 230, 190');
    Add('0, 230, 190, 253, 191');
    Add('0, 253, 191, 246, 252');
    Add('1, 237, 165, 264, 142');
    Add('1, 243, 119, 279, 95');
    Add('1, 246, 66, 296, 37');

    Canvas.Pen.Width := 10;

    for i := 0 to Count - 1 do
    begin
      s := Strings[i];
      case GPI(s, 1) of
        0: begin
             MoveTo(GPI(s,2), GPI(s,3));
             LineTo(GPI(s, 4), GPI(s, 5))
           end;
        1: Ellipse(GPI(s,2), GPI(s,3), GPI(s, 4), GPI(s, 5));
      end;
      Sleep(500);
    end;
  finally Free end;
end;
  Mit Zitat antworten Zitat
Andy1811

Registriert seit: 19. Apr 2015
5 Beiträge
 
#5

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 14:03
Ja, das geht, dann erscheinen halt die Striche alle kurz nacheinander.
Nur ich habe die Aufgabe so interpretiert, das man es sehen soll, wie Striche von Pixel/Punkt zu Pixel/Punkt entstehen
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 14:14
Ja, das geht, dann erscheinen halt die Striche alle kurz nacheinander.
Nur ich habe die Aufgabe so interpretiert, das man es sehen soll, wie Striche von Pixel/Punkt zu Pixel/Punkt entstehen
So habe ich die Aufgabe auch verstanden und nur so wäre sie nach meiner Meinung nach auch 15 Punkte wert.

Du musst jeden Bildpunkt einzeln berechnen, was bei den Waagrechten und senkrechten wohl keine allzugroße Herausforderung ist. Bei den Diagonalen und dem Dach musst Du beim Berechnen der Bildpunkte halt den Winkel berücksichtigen.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
EarlyBird
Online

Registriert seit: 29. Mär 2007
224 Beiträge
 
#7

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 14:36
nur als Anregung,
zeichne die Linien einfach in einer Schleife immer einen Punkt länger
Delphi-Quellcode:
Self.Canvas.MoveTo(50,150);
for i := 0 to 200 do
  begin
    Self.Canvas.LineTo(50 + I, 150);
    Sleep(5);
  end;
I:= 0;
Self.Canvas.MoveTo(250,150);
for i := 0 to 200 do
  begin
    Self.Canvas.LineTo(250, 150 + I);
    Sleep(5);
  end;
  Mit Zitat antworten Zitat
Andy1811

Registriert seit: 19. Apr 2015
5 Beiträge
 
#8

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 14:59
Ja, das ist schonmal sehr gut. Ich bin schon drann, und würde nachher mal den Code posten, falls er nicht doch zulang werden sollte Erstmal sollte es funktionieren
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
486 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 23:48
Habs auch mal gebastelt aus interesse, wollte aber keinen Code geben damit du auch was lernst
Da du aber schon was erhalten hast, hier meine Lösung.
Funktioniert mit Timern ohne diese Sleep geschichte ^^
Ausserdam können alle Formen gezeichnet werden man muss nur das Array anpassen

Delphi-Quellcode:
  Haus := [Point(0,150),
           Point(100,150),
           Point(100,50),
           Point(0,50),
           Point(50,0),
           Point(100,50),
           Point(0,150),
           Point(0,50),
           Point(100,150)];
Ich will den Code hier nicht posten, da du es eigentlich selber machen solltest. Die Projekt-Dateien inkl. Exe ist aber trotzdem angehängt, falls du es dir trotzdem genauer ansehen willst.
Werde Heute (Montag Morgen) noch was dazu sagen wie das ganze aufgebaut ist bin momentan zu müde - was dummes ist auch noch drinnen ist aber nicht tragisch
Video vom Zeichnen: https://www.youtube.com/watch?v=pXO80_cRgSw

Freundliche Grüsse
Angehängte Dateien
Dateityp: zip zip_haus.zip (920,3 KB, 8x aufgerufen)
Milos
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#10

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 12:12
Die Lehrer werden immer einfallsloser...
Die Schüler bleiben immer so faul, wie sie immer waren.
Die Suchfunktion wird weiter ignoriert...
http://www.mathematische-basteleien.de/haus02.gif
http://www.mathematische-basteleien.de/nikolaushaus.htm

Geändert von hathor (20. Apr 2015 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf