Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Muss einen Kompass programmieren... (https://www.delphipraxis.net/103629-muss-einen-kompass-programmieren.html)

DeddyH 20. Nov 2007 18:48

Re: Muss einen Kompass programmieren...
 
Zitat:

Zitat von MCXSC
Delphi-Quellcode:
Image1.Canvas.MoveTo(Image1.Width / 2, Image1.Height / 2);

Das wird nicht funktionieren. Ersetz mal die beiden / durch div.

MCXSC 20. Nov 2007 18:51

Re: Muss einen Kompass programmieren...
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von MCXSC
Delphi-Quellcode:
Image1.Canvas.MoveTo(Image1.Width / 2, Image1.Height / 2);

Das wird nicht funktionieren. Ersetz mal die beiden / durch div.

Funktionieren tat es nicht... war kein Integerwert. Hab mal 2x Round(x) eingefügt, so wie der Code jetzte da steht klappt es. :)

quendolineDD 20. Nov 2007 18:58

Re: Muss einen Kompass programmieren...
 
Mal nebenbei angemerkt, entspricht meiner Meinung deine Redensart weniger jemand aus der gymnasialen Oberstufe.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormPaint(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  MittelPunkt: TPoint;
  MausPunkt: TPoint;

implementation

uses math;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientWidth:=600;
  ClientHeight:=600;

MittelPunkt.X := ClientWidth div 2;
MittelPunkt.Y := ClientHeight div 2;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  MausPunkt.X:=X;
  MausPunkt.Y:=Y;

Form1.Refresh;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
//Zeichnen einer Ellipse mit dem Durchmesser 100px mit dem Mittelpunkt der Form als Mittelpunkt :)
Canvas.Ellipse(Mittelpunkt.X-50, Mittelpunkt.Y-50, Mittelpunkt.X+50, Mittelpunkt.Y+50);

Canvas.MoveTo(Mittelpunkt.X, Mittelpunkt.Y);
Canvas.LineTo(Mauspunkt.X, Mauspunkt.Y);
end;

end.
Jetzt musst du dir noch gedanken machen, wie du die eigentliche Koordinaten, wohin gezeichnet werden soll berechnen kannst.

Mit Canvas.LineTo(X, Y) zeichnest du zu den angegebenen Koordinaten eine Linie.

Du weißt mit Mauspunkt.X und Mauspunkt.Y wo sich die Maus gerade eben befindet.
Du kennst den Mittelpunkt mit seinen X und Y Koordinaten.

Wenn du dir dies mal aufzeichnest, dürftest du ein rechtwinkliges Dreieck erkennen, wo die Gerade zu dem Mauspunkt die Hypotenuse ist. Mit ArcCos(b / c) kannst du dir den Winkel berechnen.
Wobei b Ankathete und c Hypotenuse ist.

Dann weißt du ja, das bei einer Geraden der Anstieg m = tan(alpha) ist.

Sozusagen
Delphi-Quellcode:
m = tan(arccos(b / c));
Viel Spaß noch beim tüfteln, im allg. hast du genug Denkanstöße und Quellcode erhalten um dich selber mal ans Werk zu machen und herauszufinden, wie es funktioniert.

Bisher habe ich ja nichtmal von dir einen mathematischen Anstoß gesehen, die Lösung selber herauszubekommen.

Grüße aus Dresden

Tommy1988 20. Nov 2007 19:13

Re: Muss einen Kompass programmieren...
 
Zitat:

also ich hab jetz informatik klasse 12 Grundkurs.. und komm voll nich mit delphi klar... Neutral
Eins verstehe ich nicht. Du kannst kein Delphi, es wird aber von Dir erwartet einen Kompass zu erstellen?

Dazu sage ich nur:
Hoffendlich bekommt dein Lehrer heraus, dass du dir fast den ganzen Code hier beorfgt hast und gibt dir ne 6.

Ich habe in diesem Forum, lediglich ein anderes Unterforum, mal gelesen, dass "wir hier keine Hausaufgaben machen"

Den Standpiunkt vertrete ich allemal!

MCXSC 20. Nov 2007 19:21

Re: Muss einen Kompass programmieren...
 
Zitat:

Zitat von Tommy1988
Zitat:

also ich hab jetz informatik klasse 12 Grundkurs.. und komm voll nich mit delphi klar... Neutral
Eins verstehe ich nicht. Du kannst kein Delphi, es wird aber von Dir erwartet einen Kompass zu erstellen?

Dazu sage ich nur:
Hoffendlich bekommt dein Lehrer heraus, dass du dir fast den ganzen Code hier beorfgt hast und gibt dir ne 6.

Ich habe in diesem Forum, lediglich ein anderes Unterforum, mal gelesen, dass "wir hier keine Hausaufgaben machen"

Den Standpiunkt vertrete ich allemal!

Ich würde sagen, die Diskussion erübrigt sich... ~.~ Ich kenne keinen Lehrer, der direkt mal mit Delphi anfängt und dann einen Kompass programmieren lässt. Zumal IF12 Grundkurs... Da macht man eigentlich was anderes. :) Aber wie gesagt: Lassen wir das einfach mal so stehen. ;)

volcano57 21. Nov 2007 14:45

Re: Muss einen Kompass programmieren...
 
hm ja ok... ich bin wirklich nicht so gut in info

aber vielen dank an alle hier auf dem forum

find ich gut dass ihr so helft!!

volcano57 21. Nov 2007 15:01

Re: Muss einen Kompass programmieren...
 
ja ihr sagt einfach soundo ich gebe keine eigenen denkasntöße ud so weiter...

oder ihr keine HA macht für schüler...

und das der lehrer mir hoffentlich ne 6 gibt...

also erstens habe ich das programm leider nich auf meinem pc.. ich kann nur in der schule einmal die woche ausprobieren, weil wir nicht jede stunde praktisch am pc arbeiten

jah weiterhin möcht ich sagen dass das keine HA ist, weil wir so richtige implementierungen und so nur in der schule machen, ha wäre z.B. wie man das berechnet, dass sich der zeiger immer zur maus dreht...

-> ich glaub mit dem strahlensatz müsste es gehen, muss ich mal nächste std. schauen...

und ich werd auch keine 6 dafür bekommen wenn ich das nicht machen kann, weil der lehrer weiß dass ich das nicht so gut kann...

ich bin nämlich seid diesem schuljahr neu auf der schule.. klar ich hab schon seit der 9.klasse info und seit letztem schuljahr auch schon delphi, aber glubt mir das waren gaaaanz andre sachen so...

da haben wir gemacht:
- einfache zeichnungen auf der zeichenfläche zur einführung
- schleifen
- bedingungen (if blabala then blablabla)
- listen sortieren (bubbleSort, minSort,...)
- jah und zu guter letzt noch textadventure ein wenig

->und dann war ich schon weg von der schule,, komme auf meine jetzige in den info-kurs, freu mich schon, dass die das selbe programm machen und so..... und ich versteh trotzdem nix..

so mit vererbung usw... dann inits... real oder virtual.... hab ich alles gar nicht verstanden...

-> deswegen wollte ich auch hilfe von euch und danke ihr habt mir wirklich geholfen...


Aber ist doch blööd wenn jetzt mir dp-user so ne 6 in info wünschen.. wie ihr auch sicherlich in meinem ersten beitrag lesen könnt: ich wolllte von niemandem ne komplette HA

nur hilfen und evtll ansätze... die ihr mir auch gegeben habt.. VIELEN DANK!!!

so das ist meine ansicht der dinge. haut rein, bleibt sportlich

mkinzler 21. Nov 2007 15:14

Re: Muss einen Kompass programmieren...
 
Also ich glaube schon, das wir dir hier Denkanstösse geben. Es wurden dir auch Link zu einem Tutorial zu einem Canvas gegeben. Und dir geraten doch Delphi auf deinem Rechner zu installieren und ein Link zu einer Bezugsquelle der kostenlosen Turbo delphi Explorer Version gepostet.

mleyen 22. Nov 2007 08:39

Re: Muss einen Kompass programmieren...
 
Ui, sowas macht ihr in Info?
Ist ja imho mehr Mathe als Info...

Zitat:

Zitat von volcano57
müssen wir ein programm schreiben, wo auf der zeichenfläche 2 kompasse erscheinen und wo die zeiger sich immer zur maus drehen, die maus bildet also egal wo sie sich grade auf der zeichenfläche befindet den Nordpol.

So, hatte langeweile und wollte eh meine Kenntnisse in Kreis/Dreiecksberechnungen mal wieder auffrischen. doppelnutzen kann ja nie Schaden :spin: )
Falls etwas nicht passt, kannst du ja etwas zur Übung umschreiben. :twisted:
Kopier den Haufen mal in den Quelltext als Onmousemove-Ereignis von der Form.
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender:TObject;Shift:TShiftState;X,Y:Integer);
const radius=100; //Hier kannst du die Größe der Kreise bestimmen!
begin
  Canvas.MoveTo(round(Form1.Width/2+radius),round(Form1.Height/2));Canvas.Ellipse(round(Form1.Width/2+radius-radius),round(Form1.Height/2-radius),round(Form1.Width/2+radius+radius),round(Form1.Height/2+radius));
  if(Form1.Width/2+radius-x)<>0then
  begin
    if(Floor(Sqrt(Power(Form1.Width/2+radius+Form1.Left+4-Mouse.CursorPos.X,2)+Power(Form1.Height/2+Form1.Top+30-Mouse.CursorPos.Y,2)))>radius-1)then
    begin
      if(x<Form1.Width/2+radius)then Canvas.LineTo(round(Form1.Width/2+radius-Cos(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2+radius-x))))*0.017453277)*radius),round(Form1.Height/2-Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2+radius-x))))*0.017453277)*radius))
      else if(x>=Form1.Width/2+radius)then
      begin
        if(y<Form1.Height/2)and(x=Form1.Width/2+radius)then Canvas.LineTo(round(Form1.Width/2+radius+Cos(round(RadToDeg(ArcTan((Form1.Height/2-y) / (Form1.Width/2+radius-x))))*0.017453277)*radius),round(Form1.Height/2+Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2+radius-x))))*0.017453277)*radius)-radius*2)
        else Canvas.LineTo(round(Form1.Width/2+radius+Cos(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2+radius-x))))*0.017453277)*radius),round(Form1.Height/2+Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2+radius-x))))*0.017453277)*radius))
      end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
    end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
  end else
  begin
    if(Floor(Sqrt(Power(Form1.Width/2+radius+Form1.Left+4-Mouse.CursorPos.X,2)+Power(Form1.Height/2+Form1.Top+30-Mouse.CursorPos.Y,2)))>radius-1)then
    begin
      if(x<Form1.Width/2+radius)then Canvas.LineTo(round(Form1.Width/2+radius-0.000001326794896*radius),round(Form1.Height/2-0.99999999999912*radius))
      else if(x>=Form1.Width/2+radius)then
      begin
        if(y<Form1.Height/2)and(x=Form1.Width/2+radius)then Canvas.LineTo(round(Form1.Width/2+radius+0.000001326794896*radius),round(Form1.Height/2+0.99999999999912*radius)-radius*2)
        else Canvas.LineTo(round(Form1.Width/2+radius+0.000001326794896*radius),round(Form1.Height/2+0.99999999999912*radius))
      end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
    end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
  end; Canvas.MoveTo(round(Form1.Width/2-radius),round(Form1.Height/2)); Canvas.Ellipse(round(Form1.Width/2-radius-radius),round(Form1.Height/2-radius),round(Form1.Width/2-radius+radius),round(Form1.Height/2+radius));
  if(Form1.Width/2-radius-x)<>0then
  begin
    if(Floor(Sqrt(Power(Form1.Width/2-radius+Form1.Left+4-Mouse.CursorPos.X,2)+Power(Form1.Height/2+Form1.Top+30-Mouse.CursorPos.Y,2)))>radius-1)then
    begin
      if(x<Form1.Width/2-radius)then Canvas.LineTo(round(Form1.Width/2-radius-Cos(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2-radius-x))))*0.017453277)*radius),round(Form1.Height/2-Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2-radius-x))))*0.017453277)*radius))
      else if(x>=Form1.Width/2-radius)then
      begin
        if(y<Form1.Height/2)and(x=Form1.Width/2-radius)then Canvas.LineTo(round(Form1.Width/2-radius+Cos(round(RadToDeg(ArcTan((Form1.Height/2-y) / (Form1.Width/2-radius-x))))*0.017453277)*radius),round(Form1.Height/2+Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2-radius-x))))*0.017453277)*radius)-radius*2)
        else Canvas.LineTo(round(Form1.Width/2-radius+Cos(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2-radius-x))))*0.017453277)*radius),round(Form1.Height/2+Sin(round(RadToDeg(ArcTan((Form1.Height/2-y)/(Form1.Width/2-radius-x))))*0.017453277)*radius))
      end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
    end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
  end else
  begin
    if(Floor(Sqrt(Power(Form1.Width/2-radius+Form1.Left+4-Mouse.CursorPos.X,2)+Power(Form1.Height/2+Form1.Top+30-Mouse.CursorPos.Y,2)))>radius-1)then
    begin
      if(x<Form1.Width/2-radius)then Canvas.LineTo(round(Form1.Width/2-radius-0.000001326794896*radius),round(Form1.Height/2-0.99999999999912*radius))
      else if(x>=Form1.Width/2-radius)then
      begin
        if(y<Form1.Height/2)and(x=Form1.Width/2-radius)then Canvas.LineTo(round(Form1.Width/2-radius+0.000001326794896*radius),round(Form1.Height/2+0.99999999999912*radius)-radius*2)
        else Canvas.LineTo(round(Form1.Width/2-radius+0.000001326794896*radius),round(Form1.Height/2+0.99999999999912*radius))
      end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
    end else Canvas.LineTo(Mouse.CursorPos.X-Form1.Left-4,Mouse.CursorPos.Y-Form1.Top-30);
  end;
end;
Btw: Würd mich mal interressieren was dein Lehrer zu dir dann sagt.:lol: (ob der 'ne Herleitung etc. haben will?)

volcano57 22. Nov 2007 14:00

Re: Muss einen Kompass programmieren...
 
wow das sieht ja schon.. -kompliziert?- aus...

ne herleitung? hm ich denke der will dass ich dem erklär wie ich das ganze geschafft habe...

vielen dank auf jeden fall!!!

auch wenn hier behauptet wird ich würd nix selber machen...

ihr seid mir schon wirklich eine hilfe! vielen dank!!!! :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Seite 4 von 5   « Erste     234 5      

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