AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stern zeichnen mit line to und move to

Offene Frage von "hedi112"
Ein Thema von hedi112 · begonnen am 25. Okt 2009 · letzter Beitrag vom 25. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
hedi112

Registriert seit: 25. Okt 2009
12 Beiträge
 
#1

Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 13:11
guten tag,

ich studiere aktuell im dritten semester, und muss nun ein praktikum machen, wo ein stern vieleck gezeichnet weden soll.

ich hab mir auch bereits gedanken gemacht und das programm geschrieben, aber leider kommt da kein stern bei raus, sondern nur eine linie.

Da mir hinten und vorne nicht klar ist, woran das liegt, bitte ich euch einfach mal um hilfe.

ich hänge mal den bereits vorhandenen quelltext an...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    SpinEdit3: TSpinEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  xm, ym,
  Anzahl_Punkte,
  ri, ra: integer;
  Winkelstueck: double;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
    begin
    xm:=image1.Width div 2;
    ym:=image1.height div 2;
    Anzahl_Punkte:=2*spinedit1.value;
    ri:= SpinEdit2.value; //spinedit.value ist sofort
    ra:= SpinEdit3.value; //ein integer wert...
    xm:=xm+ri;
    winkelstueck:=(2*pi)/Anzahl_Punkte;
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
index,x,xi,yi: integer;

begin
   image1.Canvas.moveto(xm,ym);
   x:=Anzahl_Punkte mod 2;
for index:=1 to Anzahl_Punkte do
    if x=0 then
        begin
        xi:=trunc (ri*cos(index*winkelstueck));
        yi:=trunc (ri*sin(index*winkelstueck));
        image1.Canvas.LineTo(xi,yi)
        end
    else
        begin
        xi:=trunc (ra*cos(winkelstueck));
        yi:=trunc (ra*sin(winkelstueck));
        image1.Canvas.lineto(xi,yi);
        end;
end;

procedure TForm1.Button2Click(Sender: TObject);
   begin
   image1.picture:= nil
   end;

end.
[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
Angehängte Grafiken
Dateityp: bmp bild1_811.bmp (1,26 MB, 38x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 13:19
Seit ihr Kommilitonen?
Markus Kinzler
  Mit Zitat antworten Zitat
hedi112

Registriert seit: 25. Okt 2009
12 Beiträge
 
#3

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 13:22
jo, möglich ist das, weiß zwar gerade nicht wer genau sich da noch mit dem selben thema rumschlägt, dafür sind wir dann doch noch zuviele im studiengang
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 14:03
Der Ansatz ist nicht schlecht, du musst aber bei dem Zeichnen vom Mittelpunkt ausgehen.

Delphi-Quellcode:
for i :=1 to Anzahl_Punkte do
  begin
    if x=0 then
    begin
      xi:=trunc (xm + ri*cos(i*winkelstueck)); // <--<<
      yi:=trunc (ym + ri*sin(i*winkelstueck)); // <--<<
      Image1.Canvas.LineTo(xi, yi)
    end else
    begin
      xi:=trunc (xm + ra*cos(winkelstueck)); // <--<<
      yi:=trunc (ym + ra*sin(winkelstueck)); // <--<<
      image1.Canvas.lineto(xi, yi);
    end;
  end;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
hedi112

Registriert seit: 25. Okt 2009
12 Beiträge
 
#5

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 14:10
ok, da haste natürlich recht, da hab ich den wald vor lauter bäumen nicht gesehen...

so, jetzt kommt auf klick zwar das imagefeld, aber das ist leer?... komisch...
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 15:11
Ich habe hier was Schönes gefunden:
Es zeichnet eine EU-Flagge mit 12 (!) Sternen:

Delphi-Quellcode:
procedure drawstar( xc, yc: integer; radius:double);
var data : array[1..10] of Tpoint;
    j : integer; a: double;
begin
    for j := 0 to 4 do begin
        with data[2*j+1] do begin
            a := 2*pi*j/5;
            x := xc + round(radius*sin(a));
            y := yc - round(radius*cos(a));
            end;
        with data[2*j+2] do begin
            a := 2*pi*(j+0.5)/5;
            x := xc + round(0.4*radius*sin(a));
            y := yc - round(0.4*radius*cos(a));
            end;
        end;
    Form1.canvas.polygon(data);
end;

procedure TForm1.FormPaint(Sender: TObject);
var j, h,w, r, n: integer; a: double;
begin with canvas do begin
    h := Form1.clientheight;
    w := Form1.clientwidth;
    brush.color := clblue;
    rectangle(0,0,w,h);
    r := (2*h) div 6;
    n := 12;
    {15 EU countries - 1999,
    but flag fixed at 12
    data from EU publicity map 1999}

    brush.color := clyellow;
    for j := 0 to n do begin
        a := 2*pi*j/n;
        drawstar( w div 2 + round( r * sin(a)),
                   h div 2 + round( r * cos(a)),
                   (4*h) div 100);
        end;{for}
    end; {with}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   FormPaint(Self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 // 1 Stern mit 5 Zacken
 drawstar(150,150,150);
end;
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 15:38
@hathor: Es ist nicht Sinnvoll, einfach eine Lösung in den Raum reinzuwerfen wenn es darum geht, dass er es auch verstehen muss.

Naja wie dem auch sei.

Du hast da wohl einen kleinen Fehler in deiner Schleife

Bisher hast du ja das hier
Delphi-Quellcode:
var
  index,x,xi,yi: integer;
begin
  image1.Canvas.moveto(xm,ym);
  x:=Anzahl_Punkte mod 2;
  for index:=1 to Anzahl_Punkte do
    if x=0 then
    begin
      xi:=trunc (ri*cos(index*winkelstueck));
      yi:=trunc (ri*sin(index*winkelstueck));
      image1.Canvas.LineTo(xi,yi)
    end
    else
    begin
      xi:=trunc (ra*cos(winkelstueck));
      yi:=trunc (ra*sin(winkelstueck));
      image1.Canvas.lineto(xi,yi);
    end;
end;
Nur bleibt für jeden Zacken X = const. D.h. Du hast immer nur gleich lange "Spitzen"

Vllt. solltest du es mit so etwas versuchen

Delphi-Quellcode:
var
  i,xi,yi: integer;
begin
  xi := trunc (ra*cos(0));
  yi := trunc (ra*sin(0));
  image1.Canvas.moveto(xi,yi);

  winkelstueck := 1/Anzahl_Spitzen * ???;

  for i := 0 to Anzahl_Spitzen-1 do
  begin
    // Spitze zeichnen
    xi := trunc (ra*cos(i*winkelstueck)); //Noch falsch
    yi := trunc (ra*sin(i*winkelstueck)); //Noch falsch
    image1.Canvas.LineTo(xi,yi);

    // Gegenstück zur Spitze zeichnen (das ding da was näher am Mittelpunkt liegt xD)
    xi := trunc (ri*cos((i+0.5)*winkelstueck)); //Noch falsch
    yi := trunc (ri*sin((i+0.5)*winkelstueck)); //Noch falsch
    image1.Canvas.lineto(xi,yi);
  end;
end;
Beachte das die Berechnung noch nicht korrigiert ist das musst du noch machen (Mittelpunk mit einbeziehen).

EDIT: Im zweiten code bei der Nicht-Spitze wurde auch noch mit Index multipliziert, was bei dir im unteren Teil deines Codes noch gefehlt hat.

MFG
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 15:57
Zitat von olee:
@hathor: Es ist nicht Sinnvoll, einfach eine Lösung in den Raum reinzuwerfen wenn es darum geht, dass er es auch verstehen muss...
MFG
Ich denke auch an Suchende, die über "Stern zeichnen" auf diesen Thread geleitet werden.

Du und alle anderen können sich in Zukunft solche Bemerkungen sparen.
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 15:59
[OT]
Bis jmd. nach so etwas sucht, wird sich hier sicherlich eine Lösung gefunden haben.

Und der Thread-Ersteller wird seine Lösung dann sicherlich posten.
[/OT]

MFG
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#10

Re: Stern zeichnen mit line to und move to

  Alt 25. Okt 2009, 17:15
Zitat von hathor:
Zitat von olee:
@hathor: Es ist nicht Sinnvoll, einfach eine Lösung in den Raum reinzuwerfen wenn es darum geht, dass er es auch verstehen muss...
MFG
Ich denke auch an Suchende, die über "Stern zeichnen" auf diesen Thread geleitet werden.

Du und alle anderen können sich in Zukunft solche Bemerkungen sparen.
Naja, er muss es genauso viel / wenig verstehen wie alle anderen. Sinnvoller wäre es, die Geometrie eines Sternes mal zu erläutern (nehme mal an, das war das Problem), als etwas fertiges zu posten.

http://en.wikipedia.org/wiki/Star_polygon

Zur Konstruktion: Für einen Stern mit n Zacken einfach 2n Punkte nehmen und sie gleichmäßig um einen gewählten Mittelpunkt verteilen, mit abwechselnd hohem und niedrigem Abstand. -> Sinus, Cosinus, ... (hat also gewissermaßen Ähnlichkeiten mit der polaren Darstellung von r=f(t)=sin(n*t)/a+b+1/a)
Jakob
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz