![]() |
Re: Muss einen Kompass programmieren...
Zitat:
|
Re: Muss einen Kompass programmieren...
Zitat:
|
Re: Muss einen Kompass programmieren...
Mal nebenbei angemerkt, entspricht meiner Meinung deine Redensart weniger jemand aus der gymnasialen Oberstufe.
Delphi-Quellcode:
Jetzt musst du dir noch gedanken machen, wie du die eigentliche Koordinaten, wohin gezeichnet werden soll berechnen kannst.
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. 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:
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.
m = tan(arccos(b / c));
Bisher habe ich ja nichtmal von dir einen mathematischen Anstoß gesehen, die Lösung selber herauszubekommen. Grüße aus Dresden |
Re: Muss einen Kompass programmieren...
Zitat:
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! |
Re: Muss einen Kompass programmieren...
Zitat:
|
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!! |
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 |
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.
|
Re: Muss einen Kompass programmieren...
Ui, sowas macht ihr in Info?
Ist ja imho mehr Mathe als Info... Zitat:
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:
Btw: Würd mich mal interressieren was dein Lehrer zu dir dann sagt.:lol: (ob der 'ne Herleitung etc. haben will?)
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; |
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. |
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