Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 08.07.15 10:40
Hallo,
die Darstellung der Erdkugel ist eigentlich sehr, sehr einfach. Hat man die entsprechenden Daten, ist der Rest nur noch die Transformation der Kugelkoordinaten auf die Ebene.
Ich zeige das Beispiel nur, da es vielleicht doch den einen oder anderen gibt, der mal schnell eine Erdkugeldarstellung braucht und ich in der EE nichts gefunden habe oder natürlich falsch gesucht habe.
Im Matheprogramm nutze ich diese Routine mehrmals.
Evtl. interessiert es auch einen "Anfänger". Es ist aber kein Beispiel für "gute Programmierung".
Außer der Exe benötigt man die Dateien erde.000 bzw. erde2.000. In denen befinden sich die Koordinaten der Landgrenzen der Erde. Die zweite Datei ergibt einer genauere Darstellung.
Schaltet man auf "transparente Erde" wird auch die verdeckte Halbkugel gezeichnet. Dann kommt es wieder zu einer optischen Täuschung. Dreht sich die Erde dann links herum oder rechts herum?
Beste Grüße
Mathematiker
Revision 1: Mit Äquator, Nullmeridian, Breiten- und Längenkreise.
Revision 2: Mit wahlweiser Neigung der Erdachse.
Ergänzung: Dank der Superhilfe von Nersgatt und ub60 gibt es jetzt auch eine Komponente zur Erdkugeldarstellung. In dem Zip-File ist auch ein Demoprogramm.
Komponente:
Revision 1: Mit eigenem Breitenkreis und einstellbaren Abständen zwischen den Breiten- und Längenkreisen.
Revision 2: Im Demoprogramm kann der eigene Breitenkreis gewählt werden. Außerdem sind erste Farben einstellbar.
Revision 3: Weitere Eigenschaften der Komponente und wesentlich erweiterte Demo.
Revision 4: Zeitanzeige in die Komponente eingefügt. Zusätzlich Polarkreise. Demoprogramm überarbeitet.
Einloggen, um Attachments anzusehen!
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Fr 10.07.15 17:33, insgesamt 7-mal bearbeitet
Für diesen Beitrag haben gedankt: Narses
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.07.15 10:58
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.07.15 11:05
Lieber Mathematiker,
zeichne doch bitte noch den Greenwich-Meridian (Nullmeridian) und den Äquator dazu.
de.wikipedia.org/wiki/Referenzellipsoid
Farben wären auch ganz toll: Wasser blau, Land ocker o.ä.
VIELEN, VIELEN DANK FÜR ALLE DEINE BEITRÄGE !!!
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: Mi 08.07.15 15:12
Hallo,
hathor hat folgendes geschrieben : | ... zeichne doch bitte noch den Greenwich-Meridian (Nullmeridian) und den Äquator dazu. |
Danke für den Hinweis. In der Revision 1 kann man nun Nullmeridian, Äquator sowie Breiten- und Längenkreise einzeichnen lassen.
hathor hat folgendes geschrieben : | Farben wären auch ganz toll: Wasser blau, Land ocker o.ä. |
Hmm, das dauert aber wesentlich länger. Die Idee ist gut, nur werden die Grenzen zwischen Land und Wasser im Moment nicht als Polygone gezeichnet, sondern als Folge von Einzelstrecken. Für das Färben der Wasserflächen muss ich mir etwas einfallen lassen.
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: Mi 08.07.15 15:58
Super-schnell, super-toll !
DANKE !
Was mir noch auffiel:
Die Erdachsenneigung von ca. 23,4° könnte man noch einarbeiten...
de.wikipedia.org/wiki/Erdachse
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 08.07.15 17:18
Hallo,
hathor hat folgendes geschrieben : | Die Erdachsenneigung von ca. 23,4° könnte man noch einarbeiten... |
Kein Problem.
In der Revision 2 kannst du jetzt auch die Erdachse um die 23,4° neigen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.07.15 17:37
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 08.07.15 19:51
Hallo,
Frühlingsrolle hat folgendes geschrieben : | Der Globus als Komponente wäre sehr interessant.
Würdest du es umsetzen wollen? |
Würde ich schon.
Da ich aber mich aber noch nie mit der Komponentenerstellung beschäftigt habe, muss ich wohl passen.
Wenn sich jemand in der EE "opfert" , könnte ich noch etwas lernen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.07.15 20:05
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: Mathematiker
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.07.15 21:16
How To Embed GoogleEarth in your Delphi Application:
delphidabbler.com/articles?article=26
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 09.07.15 07:47
In der Anlage mal Deine Erde als Komponente. Ist alles quick and dirty.
Was habe ich gemacht?
Ich habe eine TPaintBox abgeleitet und die Paint-Methode überschrieben. Hier hab ich Deine Berechnungen und die Zeichnroutinen hinein gepackt.
Dann habe ich alles, was Zugriffe auf Steuerelemente des Formulars waren, in Properties umgewandelt. Die können jetzt im Objektinspektor oder im Code gesetzt werden.
Außerdem habe ich den Pfad zur Koordinatendatei zur Property gemacht. Damit kann auch das von außen gesetzt werden.
Dann habe ich ein Beispielprojekt gemacht. Hier hab ich dein Formular genommen und setzt nur noch die Properties der Komponente.
Warum heißt die Komponente "spErde"? Den Präfix "sp" habe ich in Anlehnung Deines Namens verwendet. Wenn Du mehr Komponenten machst, ist es hilfreich, wenn die eigenen Komponenten einen einheitlichen Präfix haben. Das machen die meisten Komponentenhersteller auch (DevExpress heißt z.B. immer Tcx... oder Tdx...).
Erstellt hab ich das mit Delphi XE7, hab leider grade kein Delphi 7 zur Hand. Von daher muss evtl. das dfm-File angepasst werden, damit man das Testprojekt in Delphi 7 öffnen kann.
Einloggen, um Attachments anzusehen!
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Mathematiker, Narses
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 09.07.15 08:13
ICH BIN SAUBLÖD!!!! Gerade habe ich diesen Beitrag gelöscht! Deshalb noch mal.
Hallo Nersgatt,
Vielen Dank für die Umsetzung als Komponente. Es funktioniert hervorragend. Ich konnte unter D7 die Komponente problemlos installieren.
Jetzt werde ich mir dies genauer ansehen und habe wieder etwas zum Lernen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Do 09.07.15 14:13, insgesamt 1-mal bearbeitet
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 09.07.15 14:11
Hallo,
ich habe mir jetzt die Komponente von Nersgatt angesehen und glaube, das Prinzip verstanden zu haben.
Natürlich musste ich sofort experimentieren.
Deshalb habe ich die Datei erde2.000 erst einmal mit Zlib gepackt und das Ergebnis in Create der Komponente in einer Tstringlist geladen. Das spart das ständige Nachladen der Daten. Wahrscheinlich ist ein Array mit den 32000 Koordinaten noch besser.
Schöner Nebeneffekt: Zieht man die Komponente auf ein Formular, so wird sofort die Erde angezeigt und man kann gezielter die Starteinstellungen festlegen. (veränderte Komponente im Anhang)
Ich hoffe, dass mein Versuch von constructor und destructor richtig sind. Aber die Stringliste muss ja erzeugt und wieder gelöscht werden.
Und nun mein Problem: Es ist immer noch die Datei erde2.c00 notwendig.
In meinem "jugendlichen" Wahn dachte ich, machst du daraus eine RCDATA-Ressource und fügst sie mit
{$R erde.res}
ein. Dann wird zu Beginn des Programms, wie ich es immer mache, die Ressource in einen Stream geladen und entpackt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure listedll(liste:tstringlist); var ms1: TResourcestream; ms2: TMemoryStream; begin ms1 := TResourceStream.Create(hinstance,'erde2',RT_RCDATA); try ms2 := TMemoryStream.Create; try DecompressStream(ms1, ms2); liste.LoadFromStream(ms2); finally ms2.Free; end; finally ms1.Free; end; end; | Und das funktioniert nicht. Die res-Datei wird einfach ignoriert und ist gar nicht in der dcu der Komponente enthalten.
Was mache ich schon wieder falsch?
Beste Grüße
Mathematiker
Nachtrag: Ich habe noch ein paar Starteinstellungen festgelegt und die Eigenschaften Farbe der Landgrenze und Farbe der Kreise ergänzt. Das macht Spaß.
Nachtrag 2: Ich habe noch die Stringliste entfernt und ein Koordinatenfeld eingebaut.
Hinweis: Die korrekte Komponente findet ihr im 1.Beitrag.
Einloggen, um Attachments anzusehen!
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Do 09.07.15 19:39, insgesamt 1-mal bearbeitet
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.07.15 15:41
Hast Du das so o.ä. in das DPR-File eingebunden?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ... {$R *.RES}
{$R erde2.RES}
begin Application.Initialize; ... |
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 09.07.15 17:28
Hallo,
hathor hat folgendes geschrieben : | Hast Du das so o.ä. in das DPR-File eingebunden? |
Nein, das geht ja nicht.
Die Komponente hat ja kein Projektfile sondern nur eine Unit.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Do 09.07.15 18:47
Was spricht denn gegen das Array?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const Daten : array[0..31386, 0..2] of single= ((5.67, 0.192, 0), (5.36, -0.392, 1), (5.151, -0.887, 1), (5.008, -1.417, 1), (4.776, -1.737, 1), (4.788, -2.199, 1), (4.931, -2.596, 1), (4.952, -2.772, 1), (4.975, -3.004, 1), ... (80.492, 19.763, 1), (80.466, 19.96, 1), (80.417, 19.95, 1), (80.403, 19.96, 1)); |
Habe es eben probiert. Funktioniert gut und schnell.
ub60
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 19:28
Hallo,
ub60 hat folgendes geschrieben : | Was spricht denn gegen das Array? |
Nichts!
Genau das ist es. Die Idee ist super. Vielen Dank!
Und damit kann die Erdkugel-Komponente ohne zusätzliche Datei auskommen.
Ich werde den ersten Beitrag jetzt um die Komponenten-Dateien und ein Demoprogramm mit der Komponente ergänzen.
Danke Eurer Superhilfe bin ich jetzt doch etwas stolz. "Meine" erste Komponente.
Wer sagt eigentlich, dass es in der EE sehr ruhig geworden ist? So schnelle Hilfe bekommt man nur hier.
Jetzt kann der Urlaub beginnen!
Beste Grüße und nochmals vielen Dank
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: Do 09.07.15 19:53
Aber ZLIB ändern dauert etwas länger...
www.entwickler-ecke.....php?p=678947#678947
----------------------------------------------------------------------------------------
ErdeKomponente.zip (644.86 KB) Rev 0 funktioniert sehr gut ! DANKE !
Zuletzt bearbeitet von hathor am Do 09.07.15 20:16, insgesamt 1-mal bearbeitet
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 19:57
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.07.15 20:37
Ich habe die Start-Procedure etwas erweitert, weil die Änderung der CheckButtons VOR dem Drehen nicht übernommen wird.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.BDrehungClick(Sender: TObject); begin spERDE3.aequator:=checkequa.checked; spERDE3.Transparent:=checktran.checked; spERDE3.nullmeridian:=checknull.checked; spERDE3.breitenkreise:=checkbkreis.checked; spERDE3.laengenkreise:=checklkreis.checked; spERDE3.erdachse:=checkachse.checked;
timer1.enabled:=not timer1.enabled; if timer1.enabled then BDrehung.caption:='Stopp' else BDrehung.caption:='Drehung'; end; |
Für diesen Beitrag haben gedankt: Mathematiker
|
|
|