Autor |
Beitrag |
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Do 09.07.15 21:41
Nur mal noch so als Idee:
- Der Greenwich-Meridian und der Äquator könnten eine eigene Farbe erhalten.
- Der eigene Breitenkreis wäre auch ganz interessant (natürlich nur, wenn man nicht vertikal dreht - ansonsten ergibt sich auch ein interessanter Effekt ).
ub60
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Do 09.07.15 22:12
Wenn das jetzt eh schon eine Komponente ist, könntest du auch noch etwas Anti-Aliasing 'reinbringen
Konkret hier: Delphi-Quelltext 1: 2: 3:
| bitmap:=tbitmap.create; bitmap.width:=Self.width; bitmap.height:=Self.height; |
Das Bitmap viermal so groß dimensionieren:
Delphi-Quelltext 1: 2: 3:
| bitmap := Tbitmap.create(); bitmap.width := 2 * Self.width; bitmap.height := 2 * Self.height; |
Und die Ellipse für den Umriss füllen.
Dann zeichnen und am Ende bei Self.canvas.draw(0,0,bitmap); wieder auf die halbe Größe skalieren. (Wie weiß ich leider gerade auch nicht)
Es könnte sein, dass es dann ruckelt, aber es sollte auch schöner aussehen. Gerade wenn man keine Animation macht, ist das vielleicht schon ein Argument - ggf. einstellbar gestalten.
Das Bitmap solltest du übrigens auch nur einmal erstellen und in einer Property speichern zur Wiederverwendung. Bei jedem Paint Speicher zu allozieren verschwendet ein wenig Performance.
(Wenn das Anti-Aliasing zur Property wird, muss man natürlich bei jeder Änderung ein neues Bitmap erzeugen)
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 09.07.15 22:15
Hallo,
ub60 hat folgendes geschrieben : | Der Greenwich-Meridian und der Äquator könnten eine eigene Farbe erhalten. ... |
Gute Vorschläge.
Ich habe auch schon überlegt und da kam mir so in den Sinn:
- Abstände der Breiten- und Längenkreise einstellbar
- Tag- und Nachtgrenze, wie in www.entwickler-ecke....ewtopic.php?t=114460, einzeichnen (wird aber schwierig)
- Nördlicher und südlicher Wendekreis
- Zeitzonen (wird aber wohl auch schwierig)
Es gibt also noch genug zu tun.
jfheins hat folgendes geschrieben : | ... könntest du auch noch etwas Anti-Aliasing 'reinbringen |
Danke für den Hinweis. Wie gesagt, es gibt noch viel zu tun.
Beste Grüße
Mathematiker
Nachtrag: In der Revision 1 der Komponente kann man den eigenen Breitenkreis zeichnen und die geografische Breite eingeben. Außerdem sind die Abstände zwischen den Längen- und Breitenkreisen einstellbar.
Mehr wird heute Abend leider nicht mehr.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.07.15 09:04
Erweiterung:
2 Label:
Lokale Zeit (Deutschland bzw. MEZ)
View (ungefähre Zeit des sichtbaren Globusausschnitts)
Weil 1 Stunde ein vierundzwanzigstel einer 360°-Umdrehung ist, wird Timer1.Tag hochgezählt bis 15 und dann eine Stunde addiert.
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:
| procedure TForm1.Timer1Timer(Sender: TObject); var z:integer; myDate1, myDate2 : TDateTime; begin if checkhori.checked then begin z:=spinvert.value; inc(z); Timer1.Tag:= Timer1.Tag+1; if Timer1.Tag=15 then BEGIN inc(H); if H>23 then H:=0; myDate1 := EncodeTime(H,0,0,0); myDate2 := myDate1 + now; Label4.caption:= 'View: '+FormatDateTime('t', myDate2); END; if Timer1.Tag>15 then Timer1.Tag:= 1;
if z>360 then BEGIN z:=0; Label3.caption:= 'Lokal: '+FormatDateTime('t', now); END;
spinvert.value:=z; spERDE3.vertikal:=spinvert.Value; end; if checkvert.checked then begin z:=spinhori.value; inc(z); if z>180 then z:=-180; spinhori.value:=z; spERDE3.horizontal:=spinhori.Value; end; end; |
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 10.07.15 10:18
Hallo,
hathor hat folgendes geschrieben : | Lokale Zeit (Deutschland bzw. MEZ)
View (ungefähre Zeit des sichtbaren Globusausschnitts) |
Danke für den Hinweis. Ich habe es sofort in die Demo eingebaut. Außerdem kann man nun mehr einstellen.
Ergänzungen der Komponente sind die Wendekreise und die Anzeige des eigenen Ortes.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.07.15 11:02
Ich bin jetzt völlig verwirrt mit den unterschiedlichen Komponenten + Demos.
Kann es sein, dass Du falsche Versionen hochgeladen hast?
SORRY - alles ok.
Der Irrtum wurde durch eine falsche Nummerierung durch Firefox-DL verursacht.
Vorschlag:
Statt Nummern Datum und Zeit anhängen: Beispiel : ErdeKomponente(20150710-11.30)
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 10.07.15 17:38
Hallo,
ich habe noch einmal die Komponente verändert. Zum einen werden auch die Polarkreise gezeichnet, zum anderen habe ich die Zeitanzeige in die Komponente eingefügt.
Die Lokalzeit ist die aktuelle Computerzeit. Die Viewzeit ist die Ortszeit(!) des Ortes, der sich gerade in der Mitte der Darstellung befindet. Allerdings funktioniert dies nur korrekt, wenn die Eigenschaft EigeneZeitzone in der Komponente korrekt eingestellt ist.
Außerdem habe ich noch einmal das Demoprogramm verändert.
So, das war's im Moment. Ich melde mich für ein paar Tage ab.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.07.15 18:46
Schönen Urlaub !!!
....Komm zurück mit vielen, neuen, guten Ideen...
Wer die Komponente nicht installieren will, muss nicht viel ändern - es geht auch ohne Installation.
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: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237:
| unit uerde;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, StdCtrls, Spin, spErde;
type TForm1 = class(TForm) Panel1: TPanel; Timer1: TTimer; BDrehung: TButton; CheckHori: TCheckBox; CheckVert: TCheckBox; Spinhori: TSpinEdit; Label1: TLabel; Label2: TLabel; SpinVert: TSpinEdit; CheckTran: TCheckBox; CheckEqua: TCheckBox; CheckNull: TCheckBox; CheckBkreis: TCheckBox; CheckLKreis: TCheckBox; CheckAchse: TCheckBox; CheckEKreis: TCheckBox; SpinEigen: TSpinEdit; ColorDialog1: TColorDialog; BFarbeL: TButton; BFarbeB: TButton; CheckWende: TCheckBox; Label3: TLabel; Label4: TLabel; SpinELaenge: TSpinEdit; CheckOrt: TCheckBox; Label5: TLabel; SpinBreiteAbstand: TSpinEdit; Label6: TLabel; SpinLaengeAbstand: TSpinEdit; CheckLZeit: TCheckBox; CheckVZeit: TCheckBox; Shape1: TShape; Label7: TLabel; Shape2: TShape; CheckPolar: TCheckBox; procedure BDrehungClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpinhoriChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure CheckTranClick(Sender: TObject); procedure CheckEquaClick(Sender: TObject); procedure CheckNullClick(Sender: TObject); procedure CheckBkreisClick(Sender: TObject); procedure CheckLKreisClick(Sender: TObject); procedure CheckAchseClick(Sender: TObject); procedure SpinVertChange(Sender: TObject); procedure CheckEKreisClick(Sender: TObject); procedure SpinEigenChange(Sender: TObject); procedure BFarbeLClick(Sender: TObject); procedure BFarbeBClick(Sender: TObject); procedure CheckWendeClick(Sender: TObject); procedure CheckOrtClick(Sender: TObject); procedure SpinELaengeChange(Sender: TObject); procedure SpinBreiteAbstandChange(Sender: TObject); procedure SpinLaengeAbstandChange(Sender: TObject); procedure CheckLZeitClick(Sender: TObject); procedure CheckVZeitClick(Sender: TObject); procedure CheckPolarClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; spErde1: TspErde; implementation
{$R *.DFM}
procedure TForm1.BDrehungClick(Sender: TObject); begin timer1.enabled:=not timer1.enabled; if timer1.enabled then BDrehung.caption:='Stopp' else BDrehung.caption:='Drehung'; end;
procedure TForm1.Timer1Timer(Sender: TObject); var z:integer; begin if checkhori.checked then begin z:=spinvert.value; inc(z); if z>180 then z:=-180; spinvert.value:=z; sperde1.vertikal:=spinvert.Value; end; if checkvert.checked then begin z:=spinhori.value; inc(z); if z>180 then z:=-180; spinhori.value:=z; sperde1.horizontal:=spinhori.Value; end; end;
procedure TForm1.SpinhoriChange(Sender: TObject); begin if timer1.Enabled and checkvert.checked then exit; sperde1.Horizontal:=spinhori.Value; end;
procedure TForm1.FormCreate(Sender: TObject); begin sperde1:= TspErde.Create(self); sperde1.Parent := Self; sperde1.Align:= alClient; end;
procedure TForm1.FormShow(Sender: TObject); begin form1.DoubleBuffered:=true; sperde1.vertikal:=0; sperde1.horizontal:=15; shape1.Brush.color:=sperde1.LandColor; shape2.Brush.color:=sperde1.KreiseColor; end;
procedure TForm1.CheckTranClick(Sender: TObject); begin sperde1.Transparent:=checktran.checked; end;
procedure TForm1.CheckEquaClick(Sender: TObject); begin sperde1.aequator:=checkequa.checked; end;
procedure TForm1.CheckNullClick(Sender: TObject); begin sperde1.nullmeridian:=checknull.checked; end;
procedure TForm1.CheckBkreisClick(Sender: TObject); begin sperde1.breitenkreise:=checkbkreis.checked; end;
procedure TForm1.CheckLKreisClick(Sender: TObject); begin sperde1.laengenkreise:=checklkreis.checked; end;
procedure TForm1.CheckAchseClick(Sender: TObject); begin sperde1.erdachse:=checkachse.checked; end;
procedure TForm1.SpinVertChange(Sender: TObject); begin if timer1.Enabled and checkhori.checked then exit; sperde1.Vertikal:=spinvert.Value; end;
procedure TForm1.CheckEKreisClick(Sender: TObject); begin sperde1.eigenerkreis:=checkekreis.checked; end;
procedure TForm1.SpinEigenChange(Sender: TObject); begin sperde1.eigenebreite:=spineigen.value; end;
procedure TForm1.BFarbeLClick(Sender: TObject); begin colordialog1.Color:=sperde1.LandColor; if colordialog1.execute then begin sperde1.LandColor:=colordialog1.color; shape1.Brush.Color:=colordialog1.Color; end; end;
procedure TForm1.BFarbeBClick(Sender: TObject); begin colordialog1.Color:=sperde1.KreiseColor; if colordialog1.execute then begin sperde1.KreiseColor:=colordialog1.color; shape2.Brush.Color:=colordialog1.Color; end; end;
procedure TForm1.CheckWendeClick(Sender: TObject); begin sperde1.wendekreise:=checkwende.checked; end;
procedure TForm1.CheckOrtClick(Sender: TObject); begin sperde1.eigenerort:=checkort.checked; end;
procedure TForm1.SpinELaengeChange(Sender: TObject); begin sperde1.eigenelaenge:=spinelaenge.value; end;
procedure TForm1.SpinBreiteAbstandChange(Sender: TObject); begin sperde1.breitenabstand:=spinbreiteabstand.value; end;
procedure TForm1.SpinLaengeAbstandChange(Sender: TObject); begin sperde1.laengenabstand:=spinlaengeabstand.value; end;
procedure TForm1.CheckLZeitClick(Sender: TObject); begin sperde1.Zeitlokal:=checklzeit.checked; end;
procedure TForm1.CheckVZeitClick(Sender: TObject); begin sperde1.Zeitview:=checkvzeit.checked; end;
procedure TForm1.CheckPolarClick(Sender: TObject); begin sperde1.polarkreise:=checkpolar.checked; end;
end. |
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.07.15 07:28
Wer die Rotationsgeschwindigkeit ändern will, fügt eine Trackbar hinzu.
Ändert das Timer.Interval von 10 msec bis 240000 = 1 Umdrehung/ 24 Std.
USER_TIMER_MINIMUM (0x0000000A)
USER_TIMER_MAXIMUM (0x7FFFFFFF)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.TrackBar1Change(Sender: TObject); begin Timer1.Interval:= ABS(TrackBar1.Position); TrackBar1.SelEnd:= TrackBar1.Position; Label8.Caption:= INTTOSTR(Timer1.Interval); end;
procedure TForm1.FormCreate(Sender: TObject); begin sperde1:= TspErde.Create(self); sperde1.Parent := Self; sperde1.Align:= alClient; TrackBar1.Min:= -240000; TrackBar1.Max:= -10; TrackBar1.Position:= -20; TrackBar1.SelEnd:= -10; TrackBar1.SelStart:= -200; Timer1.Interval:= ABS(TrackBar1.Position); TrackBar1.SelEnd:= TrackBar1.Position; Label8.Caption:= INTTOSTR(Timer1.Interval); end; |
|
|
|