Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi realisierung von pfeilen zeichnen (https://www.delphipraxis.net/33126-realisierung-von-pfeilen-zeichnen.html)

Nicodius 2. Nov 2004 07:26


realisierung von pfeilen zeichnen
 
ich mag in meiner paintbox mit gedrückter maustaste beliebig zeichnen können(kreise etc) und am ende eine ^ spitze haben ... wie halt ein pfeil ausschaut.

nur hab ich ein problem ... wie erkenn ich in welceh richtung mein pfeil gerade schaut(wenn ich nen kreis zeichne sollte er in der kreislinie "weiterschauen" und der pfeilkopf sollte nicht in irgendeine richtung schauen) ... wie könnte ich dies machen?

Nicodius 2. Nov 2004 08:08

Re: realisierung von pfeilen zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier anbei ein screenshot


wie fidne ich jetzt die richtung in die gezeichnet wurde ehraus damit ich die zwei linien für die pfeilspitze richtig aufsetzten kann?

choose 2. Nov 2004 08:38

Re: realisierung von pfeilen zeichnen
 
Hallo Nicodius,

Theoretisch sollte es genügen, wenn Du Dir die letzten beiden Punkte merkst und Du zur Errechnung des Richtungsvektors die Koordinaten des letzten von denen des vorletzten abziehst. In der Praxis könnte hier allerdings Probleme bei "Absetzen des Stiftes" auftreten: Die Kurve macht warhscheinlich zum Schluss einen kleinen "Schlenker".
Versuche Punkte mit größerem Abstand zu verwenden oder den Mittewert von Vektoren mit unterschiedlichen Punkten am Ende zu bilden, um das Problem zu lösen (alternativ könnten Bei Google suchensplines helfen)...

Nicodius 2. Nov 2004 09:17

Re: realisierung von pfeilen zeichnen
 
hat wer vielleicht formeln oder fertigen code?

vom prinzip her weiß ich was du meinst .. danke schonmal aber das bringt mir derweil noch nichts :drunken:


dizzys blackmamba hat ja auch so ein prinzip .. wie machst du das dizzy?

Nicodius 2. Nov 2004 12:50

Re: realisierung von pfeilen zeichnen
 
Delphi-Quellcode:
  {Flaeche.Canvas.MoveTo(X,Y);  //    ---+
  Flaeche.Canvas.LineTo(X+10,Y+10);// ---_-
  Flaeche.Canvas.LineTo(X,Y+10);//    ---_-/
  Flaeche.Canvas.MoveTo(X+10,Y+10);// ---_-
  Flaeche.Canvas.LineTo(X+10,Y);} //    ---_-\    = ---->

mit diesem code kann ich ne spitze machcne(von ner freundin.. die hat das sofort gehabt ;) ) --- aber die zspitze zeig t immer in de rechte untere ecke vom formula ... also geht nur bei einer neigung in die ecke runter das der pfeil wie ein pfeil aussieht ...

was kann ich denn dagegen machen?

dizzy 2. Nov 2004 16:08

Re: realisierung von pfeilen zeichnen
 
Zitat:

Zitat von Nicodius
wie machst du das dizzy?

Genau anders herum :mrgreen:
Ich weiss in welche Richtung der "Pfeil" (Kopf) Zeigt, und alles dahinter bleibt quasi liegen bis das Schwanzende ankommt.

Bei deinem Problem würde ich es genau so versuchen wie choose es beschrieben hat.

Nicodius 2. Nov 2004 16:14

Re: realisierung von pfeilen zeichnen
 
das kapier ich aber nicht :zwinker:

ReDoX 2. Nov 2004 16:16

Re: realisierung von pfeilen zeichnen
 
Vieleicht mit
Delphi-Quellcode:
var
  CursorPos: TPoint;
begin
  GetCursorPos(CursorPos);
  Caption := IntToStr(CursorPos.X) +' '+ IntToStr(CursorPos.Y);
end;
Und dann CursorPos.X in einer Variable speichen und gucken ob sie größer oder kleiner ist das gleiche noch mit CursorPos.Y !
Mfg MrScholz

Nicodius 2. Nov 2004 16:17

Re: realisierung von pfeilen zeichnen
 
ist das nicht mit steigung k möglich

Nicodius 2. Nov 2004 16:20

Re: realisierung von pfeilen zeichnen
 
MrScholz dazu brauch ich aber gar nicht den cursor ... den endpunkt hab ich auch so ;)

ReDoX 2. Nov 2004 16:23

Re: realisierung von pfeilen zeichnen
 
Ich habe das gerade mal gemach hier der QuellCode:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CursorPos: TPoint;
  Links , Unten : Integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  GetCursorPos(CursorPos);
  Links:=CursorPos.X;
  Unten:=CursorPos.Y;
  end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  GetCursorPos(CursorPos);
  Caption := IntToStr(CursorPos.X) +' '+ IntToStr(CursorPos.Y);
  if links > CursorPos.X then showmessage('Nach links') else showmessage('Nach rechts');
  if unten > CursorPos.Y then showmessage('Nach oben') else showmessage('Nach unten');
  end;
end.
Ich hoffe das ist ,dass was du suchst! :mrgreen:
Mfg MrScholz

Nicodius 2. Nov 2004 16:30

Re: realisierung von pfeilen zeichnen
 
nein, eigentlich überhaupt nicht :mrgreen:

ich suche

Zitat:

nur hab ich ein problem ... wie erkenn ich in welceh richtung mein pfeil gerade schaut(wenn ich nen kreis zeichne sollte er in der kreislinie "weiterschauen" und der pfeilkopf sollte nicht in irgendeine richtung schauen) ... wie könnte ich dies machen?

der strich geht in ne richtung(0 - 360° möglich ;) ) die will ich heruasfinden um(und nacher einen pfeilkopf hinzuzeichnen(wie das geht will ich auch wissen ;) )

ReDoX 2. Nov 2004 16:46

Re: realisierung von pfeilen zeichnen
 
Naja wer lesen kann ist klar im Vorteil :oops:
Mfg MrScholz

dizzy 2. Nov 2004 16:52

Re: realisierung von pfeilen zeichnen
 
Zitat:

Zitat von Nicodius
ist das nicht mit steigung k möglich

Wenn man es so nennen will, dann geht auch "Steigung". Kommt hierbei im Wesentlichen auf's gleiche heraus. Du wirst hierbei allerdings nicht um Vektorrechnung herum kommen. Ich denke mal, dass das in der Schule bei dir noch kein Thema war (?) - es gibt aber googeligerweise sehr viel zu dem Thema ;).

shmia 2. Nov 2004 17:20

Re: realisierung von pfeilen zeichnen
 
Also ich zeige hier mal, wie man einen Pfeil zeichnet, der in eine beliebige Richtung zeigt.
Zunächst brauchen wie die Hilfsfunktionen aus:
Drehung und Verschiebung im 2D Raum

Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
   pfeil : array[0..3] of TPoint;
begin
   // Pfeil im Ursprung zeigt nach "rechts"
   pfeil[0] := Point(0 ,0);
   pfeil[1] := Point(0, -10);
   pfeil[2] := Point(30, 0);
   pfeil[3] := Point(0, 10); // die Linie wird in Canvas.Polygon autom. geschlossen

   // Drehung des Pfeils im Ursprung
   Rotate2Darray(pfeil, 0.5);

   // Verschiebung des Pfeils
   Translate2Darray(pfeil, Point(x, y));

   // Zeichen des Pfeils
   Canvas.Polygon(pfeil);
end;

Nicodius 2. Nov 2004 21:16

Re: realisierung von pfeilen zeichnen
 
ich wiederhole die 9 klasse - vektoren(länge+richtung) hab ich schon in der 7 gelernt ^^

@shmia danke das probier ich mal aus :)

Nicodius 2. Nov 2004 21:19

Re: realisierung von pfeilen zeichnen
 
wobei man sagen muss das sincos in math liegt ;) ... aber ich sag gleich was dazu ;)

Nicodius 2. Nov 2004 21:21

Re: realisierung von pfeilen zeichnen
 
:roll: das macht bei mir aber ÜBERhaupt nichts gescheites(zeichent gerademal ein dreieck :mrgreen: ) :zwinker: ein pfeil ist etwas mit strich :) und deins rotiert auch nicht :cry: aber danke trotzdem :stupid:

shmia 3. Nov 2004 09:02

Re: realisierung von pfeilen zeichnen
 
Zitat:

Zitat von Nicodius
:roll: das macht bei mir aber ÜBERhaupt nichts gescheites(zeichent gerademal ein dreieck :mrgreen: ) :zwinker: ein pfeil ist etwas mit strich :) und deins rotiert auch nicht :cry: aber danke trotzdem :stupid:

Ich habe dir doch jetzt alle Mittel an die Hand gegeben um einen Pfeil in beliebiger Richtung zu Zeichnen.
Nun ist es an Dir, dies in die Praxis umzusetzen. :roll:
Ein Pfeil ist ein Dreick mit einem Strich dran. Der "Strich" ist ja schon vorhanden; also brauchst du
nur noch am Endpunkt der Linie ein Dreick zu zeichnen, dass in die Richtung der Linie schaut, oder???

Hast du dich nicht gefragt, was das Argument 0.5 bei Rotate2Darray(pfeil, 0.5); bedeutet? :coder2:
Das ist der Winkel im Bogenmass!!! Verändert man diesen Wert, dreht sich der Pfeil in die angegebene Richtung!!!

Nicodius 3. Nov 2004 14:04

Re: realisierung von pfeilen zeichnen
 
aso, ja sorry... aber siehst du genau DARAN scheiterts ... ich kenn mich da wirklich nid aus :mrgreen:

Nicodius 3. Nov 2004 14:55

Re: realisierung von pfeilen zeichnen
 
shmia danke danke!!! aber ein problem noch :) ... wie bekomme ich den winkel heraus in der die linie zeigt?

Nicodius 3. Nov 2004 20:37

Re: realisierung von pfeilen zeichnen
 
wie bekomme ich denn den winkel und das bogenmaß ? :cry: ic hsuch seit stunden finde aber nur technische aanleitungen :cry: --- suche verzweifelt in meinen alten phyikbüchern(ich hab das ja scho nmal gemacht(1 rad = 180° oder so) bitte helft mir :cry:

Mirilin 3. Nov 2004 20:44

Re: realisierung von pfeilen zeichnen
 
:hi: Nicodius

Wikipedia
Delphi-Quellcode:
 DegToRad & RadToDeg

mfg Tobias

atreju2oo0 3. Nov 2004 21:40

Re: realisierung von pfeilen zeichnen
 
Um den Winkel herauszubekommen musst Du folgendes machen:

Sei p1 und p2 die letzten beiden Punkte vom Typ TPoint.
Dann ist der Winkel a gegeben durch:

Delphi-Quellcode:
a:= arcTan[ (p2.y-p1.y)/(p2.x-p1.x) ]
Wie arcTan als funktion in Delphi heisst weiß ich jetzt nicht genau aber das kriegste schon raus!
Und du musst vorher noch auf den Sonderfall aufpassen wenn die x-Koordinaten beide gleich sind, weil dann
Division durch 0 auftritt! Das am besten mit ner Exceptoin abfangen und dann den Winkel halt auf 90 grad setzten...

Mit den Infos müssteste den Rest alleine schafen denk ich!

:thumb:

Nicodius 4. Nov 2004 14:10

Re: realisierung von pfeilen zeichnen
 
danke .. ich habe gestern einfach experimentiert und habe es geschafft das das nach alle in die rechte richtung gezeichneten gehen ...

so .. die formel ist gut! das ist nämlich auch die steigung k wenn ich mich nicht irre :) ... aber für was steht das arcTan ? tangente oder?


ich such ob ichs krieg ... vielen dank schonmal!

choose 4. Nov 2004 14:22

Re: realisierung von pfeilen zeichnen
 
Hallo Nicodius,

wenn ich das richtig sehe, brauchst Du nur ein wenig Vektorrechnung, der Winkel zur Abzisse sollte nicht von Bedeutung sein. Sieh die einmal diesen Quelltext an, um zu sehen, wie ein Pfeil mit Spitze ausschließlich unter Zuhilfenahme von zwei Koordinaten ohne trigonometrische Funktionen gezeichnet werden kann.

Nicodius 4. Nov 2004 14:32

Re: realisierung von pfeilen zeichnen
 
EDIT


DANKE CHOOSE DAS WARS!!! :thumb: :thumb: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz