Autor |
Beitrag |
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mi 07.11.07 19:54
Zitat: | Ich weiß zwar nich aus welchem BuLand du kommst, aber bei mir in BaWü wurde erst in der 10. Klasse vor den ZKs die Trigonometrie behandelt ... |
komm aus NRW und bin noch die generation die keine ZKs erlebt hat ^^
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 07.11.07 20:40
Klar bewegt sich dein Bild nur nach rechts. Wenn es sich im Kreis bewegen soll sieht das ganze dann doch noch ein bisschen anders aus.
Wenn du dir einen Kreis anschaust, dann besteht der ja im Grunde aus einer Reihe von Punkten die so dich gesetzt sind das sie wie eine Linie wirken.
Wenn du nun einen virtuellen Punkt (deine Erde) auf dieser Punktkette wandern lassen willst musst du sie jedes mal auf einen neuen Punkt setzen!
Funktionen hattest du doch aber schon in der Schule? Sowas wie y = x+2 oder y = x^2+x?
Hier geht es ja um nichts anderes, nämlich um die Kreisfunktion. Die stellt aber eben keine gerade Linie oder Parabel dar, sondern eigentlich eine Sinuswelle - oder eben einen Kreis.
Das produziert eine Sinuswelle:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var l,x,y: integer;
for l := 0 to 360 do begin x := l; y := Round(Sin(DegToRad(l))*100); end; |
Und das wird ein Kreis.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var l,x,y: integer;
for l := 0 to 360 do begin x := Round(Cos(DegToRad(l))*100); y := Round(Sin(DegToRad(l))*100); end; |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 11.11.07 00:26
also.. ich hab jetzt mal deine sachen ausprobiert.. allerdings verschwindet das image (bei der unten angegebenen unit) immer kurz nach rechts unten und erscheint dann wieder. Letztendlich ist er dann ganz verschwunden...
hier die unit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Timer1Timer(Sender: TObject); var l,x,y: integer; begin for l := 0 to 360 do begin x:=l; x := Round(Cos(DegToRad(l))*100); y := Round(Sin(DegToRad(l))*100); image1.Top:=image1.top+y; image1.left:=image1.left+x; end; end; |
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 11.11.07 00:39
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Timer1Timer(Sender: TObject); var l,x,y: integer; begin for l := 0 to 360 do begin x:=l; x := Round(Cos(DegToRad(l))*100); y := Round(Sin(DegToRad(l))*100);
image1.Top:=image1.top+y; image1.left:=image1.left+x; end; end; |
Ich würde "L" mit Hilfe des Timers und nicht mit einer For-Schleife hochzählen lassen.
Irgendwie sowas:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var l,x,y: integer; begin if (l >= 360) then l := 0;
inc(l,10);
x := Round(Cos(DegToRad(l))*10); y := Round(Sin(DegToRad(l))*10);
image1.Top:=image1.top+x; image1.left:=image1.left+y; end; |
grüße,
Marc
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: So 11.11.07 00:50
so... ich habe genau das verwendet was du geschrieben hast... trotzdem bewegt sich das image schief nach unten rechts... ich hab keine ahnung warum...
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: So 11.11.07 09:01
Hier ein nette Demo die langsam zeigt wie ein Kreis berechnet und gezeichnet wird. Sinus und Cosinus liefern mit ihren Y Werten die Daten für den Kreis.
Für die Demo braucht man ein leeres Formular und ein Button (Button1). Auf dem Formular werden einige Diagramme gezeichnet. Mit dem Sleep Wert (unten) kann man die Demo schneller und langsamer ablaufen lassen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115:
| 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 XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY); XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);
x := w; MoveTo(sinX, sinY); sinX := sinStartX + FX + w; sinY := sinStartY + mySin(x, FX, FY); LineTo(sinX, sinY);
x := w; MoveTo(cosY, cosX); cosX := cosStartY + FX + w; cosY := cosStartX + myCos(x, FX, FY); LineTo(cosY, cosX);
MoveTo(KreisX, KreisY); KreisY := sinY; KreisX := cosY; LineTo(KreisX, KreisY);
sinXorY := sinY; cosXorX := cosY; XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY); XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);
Sleep(10); Application.ProcessMessages; end;
XorLine(Canvas, 0, sinXorY, ClipRect.Right, sinXorY); XorLine(Canvas, cosXorX, 0, cosXorX, ClipRect.Bottom);
end;
end; |
_________________ Popov
|
|
Andiäääh
Hält's aus hier
Beiträge: 2
|
Verfasst: Mi 04.02.09 21:25
Hallo zusammen,
ich habe ein ähnliches Problem, ich möchte ein Image im Kreis fliegen lassen. Habe alle hier aufgeführten Codes ausprobiert, aber bei mir bewegt sich das Image entweder nur in eine Richtung oder es bewegt sich nur einmal und bleibt dann stehen.
Mein Code sieht momentan so aus:
procedure TForm1.Timer1Timer(Sender: TObject);
var
l,x,y: integer;
begin
if l>=360 then l:=0;
inc(l,1);
x := Round(Cos(DegToRad(l))*100);
y := Round(Sin(DegToRad(l))*100);
Image1.Left:=Image1.Left+x;
Image1.Top:=Image1.Top+y;
end;
Ich finde den Fehler einfach nicht. Wäre für Hilfe sehr dankbar 
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 04.02.09 21:38
Hallo und  im Forum!
Das liegt daran, dass l hier eine lokale Variable ist. Die hat bei dem nächsten Aufruf der Methode Timer1Timer nicht mehr den vorherigen Wert.
Entweder deklarierst du die global oder du benutzt die Tag-Eigenschaft des Images zur Speicherung der aktuellen Position (Image1.Tag).
|
|
Andiäääh
Hält's aus hier
Beiträge: 2
|
Verfasst: Mi 04.02.09 22:09
 ES TUT!
ich könnt dich Knutschen, hab so ewig rumprobiert 
|
|
Lazarusboy
      
Beiträge: 28
|
Verfasst: Mo 14.03.11 20:22
Wie muss man denn die Variable deklarieren?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.03.11 21:04
Am besten unter private im Formular und am besten natürlich mit einem aussagekräftigen Namen.
|
|
Lazarusboy
      
Beiträge: 28
|
Verfasst: Mo 14.03.11 21:33
Wie würde das aussehen, bin grade am probieren, verstehe aber grade nicht wie ich genau das machen soll.-)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.03.11 22:56
|
|
|