AGB  ·  Datenschutz  ·  Impressum  







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

Linie im Winkel zeichnen

Ein Thema von GroZ · begonnen am 6. Jul 2015 · letzter Beitrag vom 7. Jul 2015
Antwort Antwort
Seite 1 von 3  1 23      
GroZ

Registriert seit: 6. Jul 2015
Ort: Harz
167 Beiträge
 
Delphi 7 Personal
 
#1

Linie im Winkel zeichnen

  Alt 6. Jul 2015, 13:40
Hallo. Ich soll in einem Kreis eine Linie zeichnen soweit kein Problem. Aber diese Linie soll im Winkel angepasst sein. das heißt wenn ich 15° eingebe soll die Linie im 15° Winkel gezeichnet werden. Kann mir jemand helfen?
In etwas so hier: https://de.wikipedia.org/wiki/Polark...eiskoordinaten
Julian

Geändert von GroZ ( 6. Jul 2015 um 13:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Linie im Winkel zeichnen

  Alt 6. Jul 2015, 15:06
Und wo genau ist dein Problem, was hast du denn bis jetzt schon? Hast du schon mit MoveTo und LineTo herumexperimentiert, so wie in dem zweiten Thread, den du geschrieben hast, empfohlen?

Weiterhin: Was sind deine mathematischen Vorkenntnisse? Weißt du, wie Sinus und Kosinus definiert sind und wie man mit deren Hilfe einen beliebigen Punkt auf einem Kreis mit Radius R beschreiben kann?

Besten Gruß
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Linie im Winkel zeichnen

  Alt 6. Jul 2015, 15:56
Dieses Beispiel habe ich schon etwa 100 mal im Internet gepostet. Ich habe es mal als Demo geschrieben um zu zeigen wie man einen Kreis mit Sinus und Kosinus alleine zeichnen kann.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  w, x,
  sinX, sinY,
  cosX, cosY,
  sinXorY, cosXorX,
  KreisX, KreisY: Integer;

const
  FX = 200;
  FY = 50;
  sinStartX = 200;
  sinStartY = 100;
  cosStartX = 100;
  cosStartY = 200;

  procedure CanLine(Can: TCanvas; x1, y1, x2, y2: Integer);
  begin
    Can.MoveTo(x1, y1);
    Can.LineTo(x2, y2);
  end;

  function mySin(PixelX: Integer; PiInPixel, OneInPixel: Word): Integer;
  var
    x: Extended;
  begin
    x := Pi * (PixelX / PiInPixel);
    Result := Trunc(sin(x) * OneInPixel);
  end;

  function myCos(PixelX: Integer; PiInPixel, OneInPixel: Word): Integer;
  var
    x: Extended;
  begin
    x := Pi * (PixelX / PiInPixel);
    Result := Trunc(cos(x) * OneInPixel);
  end;

  procedure XorLine(Can: TCanvas; x1, y1, x2, y2: Integer);
  begin
    with Can, TPen.Create do
    try
      Mode := Pen.Mode;
      Pen.Mode := pmNot;
      MoveTo(x1, y1);
      LineTo(x2, y2);
      Pen.Mode := Mode;
    finally
      Free;
    end;
  end;

begin
  with Canvas do
  begin
    FillRect(ClipRect);

    MoveTo(sinStartX, sinStartY-FY);
      LineTo(sinStartX, sinStartY+FY);
    MoveTo(sinStartX, sinStartY);
      LineTo(sinStartX+(FX*2), sinStartY);
    MoveTo(cosStartX-FY, cosStartY);
      LineTo(cosStartX+FY, cosStartY);
    MoveTo(cosStartX, cosStartY);
      LineTo(cosStartX, cosStartY+(FX*2));

    sinX := sinStartX;
    sinY := sinStartY;
    cosX := cosStartY;
    cosY := cosStartX;
    KreisY := sinY;
    KreisX := cosY;


    for w := -FX to FX do
    begin
      if not(w = -FX) then
      begin
        //alte Xor-Linen löschen
        XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY);
        XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);
      end;

      //sin zeichnen
      x := w;
      MoveTo(sinX, sinY);
      sinX := sinStartX + FX + w;
      sinY := sinStartY + mySin(x, FX, FY);
      LineTo(sinX, sinY);

      //cos zeichnen
      x := w;
      MoveTo(cosY, cosX);
      cosX := cosStartY + FX + w;
      cosY := cosStartX + myCos(x, FX, FY);
      LineTo(cosY, cosX);

      //Kreis zeichen aus den Y-Werten von Sinus und Cosinus
      MoveTo(KreisX, KreisY);
      KreisY := sinY;
      KreisX := cosY;
      LineTo(KreisX, KreisY);

      //Xor-Line zeichnen
      sinXorY := sinY;
      cosXorX := cosY;
      XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY);
      XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);

      Sleep(10); //eine kurze Verzögerung damit es langsammer geht
      Application.ProcessMessages;
    end;

    //Letzte Xor-Linen löschen
    XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY);
    XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);

  end;

end; {Popov}
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Linie im Winkel zeichnen

  Alt 6. Jul 2015, 16:04
Mein Eindruck: Der TE probiert hier so lange die Hilfsbereitschaft gewisser User aus, bis er eine fertige Lösung erhält, weil er im Unterricht nicht aufgepaßt hat. Ich finde nicht, daß man das auch noch unterstützen sollte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Linie im Winkel zeichnen

  Alt 6. Jul 2015, 16:32
Das braucht er nicht, denn ob er etwas hier bekommt oder über Google, ist gehopst wie gesprungen. Nicht die Formeln sind das Problem, denn von denen gibt es im Internet genug, wichtig ist wie man an die Aufgabe herangeht. Es ist die Methode, bzw. die Technik wie man eine Aufgabe löst. Die bekommt man eigentlich in der Schule beigebracht.
Code:
Aufgabe:
Koordinate B berechnen.

Gegeben:
Koordinate A
Winkel Alpha
Hypotenuse (Radius)
Kreiszahl Pi

Gesucht:
Ankathete (Länge X)
Gegenkathete (Länge Y)
Hat man alle schön aufgeschrieben, muss man nur nach der Lösung suchen wo das Gesuchte mit dem Gegebenen berechnet werden kann.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Linie im Winkel zeichnen

  Alt 6. Jul 2015, 16:37
Nicht die Formeln sind das Problem, denn von denen gibt es im Internet genug, wichtig ist wie man an die Aufgabe herangeht. Es ist die Methode, bzw. die Technik wie man eine Aufgabe löst. Die bekommt man eigentlich in der Schule beigebracht.
Leider kann ich nicht erkennen, ob der Schüler über diese Techniken verfügt bzw. sie in der Schule gelernt hat. Wäre es da nicht wesentlich sinnvoller, erst mal abzufragen, was der denn weiß (Kenntnisstand), bevor man etwas postet, das es angeblich bereits 100 Mal im Internet zu finden gibt? Wie soll das dem Schüler jetzt weiterhelfen, seinen wohl eher mageren Kenntnisstand berücksichtigend?
  Mit Zitat antworten Zitat
GroZ

Registriert seit: 6. Jul 2015
Ort: Harz
167 Beiträge
 
Delphi 7 Personal
 
#7

AW: Linie im Winkel zeichnen

  Alt 7. Jul 2015, 08:31
Ich hatte sowas wie Informatik gar nicht in der Schule ich mache derzeit ein Praktikum und soll diese Dinge programmieren. ich schick euch mal meinen Quellcode ist wirklich sehr einfach^^

Delphi-Quellcode:
unit Uhr;

interface

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

type
  TForm1 = class(TForm)
    Winkel: TEdit;
    Strich: TButton;
    Reset: TButton;
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
    procedure ResetClick(Sender: TObject);
    procedure StrichClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i : integer;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin

canvas.Ellipse(100,100,400,400);


end;

procedure TForm1.ResetClick(Sender: TObject);
begin

paintbox1.Repaint
end;

procedure TForm1.StrichClick(Sender: TObject);
var i : integer ;
begin
canvas.MoveTo(250,250);
canvas.lineto(250,100);

i := StrToInt(Winkel.Text) ;



end;

end.
Julian
  Mit Zitat antworten Zitat
GroZ

Registriert seit: 6. Jul 2015
Ort: Harz
167 Beiträge
 
Delphi 7 Personal
 
#8

AW: Linie im Winkel zeichnen

  Alt 7. Jul 2015, 08:55
Das braucht er nicht, denn ob er etwas hier bekommt oder über Google, ist gehopst wie gesprungen. Nicht die Formeln sind das Problem, denn von denen gibt es im Internet genug, wichtig ist wie man an die Aufgabe herangeht. Es ist die Methode, bzw. die Technik wie man eine Aufgabe löst. Die bekommt man eigentlich in der Schule beigebracht.
Code:
Aufgabe:
Koordinate B berechnen.

Gegeben:
Koordinate A
Winkel Alpha
Hypotenuse (Radius)
Kreiszahl Pi

Gesucht:
Ankathete (Länge X)
Gegenkathete (Länge Y)
Hat man alle schön aufgeschrieben, muss man nur nach der Lösung suchen wo das Gesuchte mit dem Gegebenen berechnet werden kann.
Den winkel Alpha möchte ich über ein Editfeld selber eingeben.
Julian
  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
 
#9

AW: Linie im Winkel zeichnen

  Alt 7. Jul 2015, 09:45
Wenn du auf dem Canvas der Paintbox malen möchtest, dann musst du auch auf dem Canvas der Paintbox malen und nicht auf dem Canvas der Form!
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  LCanvas: TCanvas;
begin
  LCanvas := TPaintBox(Sender).Canvas;

  LCanvas.Ellipse(100,100,400,400);

end;
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)
  Mit Zitat antworten Zitat
GroZ

Registriert seit: 6. Jul 2015
Ort: Harz
167 Beiträge
 
Delphi 7 Personal
 
#10

AW: Linie im Winkel zeichnen

  Alt 7. Jul 2015, 09:57
Das ist jetzt mein Quellcode. Jetzt komm ich aber absolout nicht mehr weiter...
Delphi-Quellcode:
unit Uhr;

interface

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

type
  TForm1 = class(TForm)
    Winkel: TEdit;
    Strich: TButton;
    Reset: TButton;
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
    procedure ResetClick(Sender: TObject);
    procedure StrichClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i : integer;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  LCanvas: TCanvas;
begin

LCanvas := TPaintBox(Sender).Canvas;

  LCanvas.Ellipse(100,100,400,400);


end;

procedure TForm1.ResetClick(Sender: TObject);
begin

paintbox1.Repaint
end;

procedure TForm1.StrichClick(Sender: TObject);
var Radi, Gradi : extended ;
    Pi: extended ;
begin
canvas.MoveTo(280,280);
canvas.lineto(280,125);

Gradi := StrToFloat(Winkel.Text) ;

Radi := Pi*(Gradi/180);







end;

end.
Julian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:43 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