Forum: Compiler & IDEs gcc c++ 3d Vektoren Standard?


von Markus (Gast)


Lesenswert?

Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf 
kleineren ARM-Controllern verwendet werden kann?
Ich brauche ein paar Standard-Funktionen wie Multiplikation und 
Betragsbildung und will das Rad nicht neu erfinden.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo Markus,
guck Dir mal die Eigen Library an (http://eigen.tuxfamily.org/dox/). Aus 
zuverlässiger Quelle weiß ich, dass man das auch auf einem Cortex-M0 
nutzen kann.

mfg Torsten

von Markus (Gast)


Lesenswert?

Hallo Torsten,

das sieht interessant, aber auch etwas zu kompliziert aus.
Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen 
befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das 
erscheint mir etwas seltsam.

Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt, 
Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte 
Speicher belegen.

von Bastler (Gast)


Lesenswert?

Markus schrieb:
> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,
> Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte
> Speicher belegen.

Ist doch schnell selber programmiert? Dafür ist die eigen-Bibliothek 
tatsächlich etwas zu mächtig.

von nicht“Gast„ (Gast)


Lesenswert?

Moin,

Ich hab jetzt nur nenn kurzen Blick drauf geworfen.
Das alles in den Headern ist, liegt an den Templates. Wenn man die 
verwendet, kann man das nicht mehr in .h und .cpp aufteilen. Das bringt 
den Compiler durcheinander.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Markus schrieb:
> das sieht interessant, aber auch etwas zu kompliziert aus.
> Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen
> befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das
> erscheint mir etwas seltsam.

Naja, dass ist eigentlich bei modernen C++ Libraries fast schon üblich. 
Mir ist aber nicht klar, was Du suchst. Es hat sich bestimmt noch 
niemand hingesetzt und eine Library geschrieben, die exakt die Handvoll 
Funktion enthält, die Du gerade jetzt brauchst.

Entweder Du schreibst das selbst (und mit Schreiben ist es in der Regel 
nicht getan, da fehlt dann auch noch die Validieren, Dokumentation, 
Optimierung etc.), oder Du setzt Dich mal einen halben Tag hin und ließt 
die Dokumentation einer Library, die so etwas kann und dann hat Dein 
Werkzeugkasten wieder ein wertvolles Werkzeug mehr.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Und wenn ich mir die Beispiele hier: 
http://eigen.tuxfamily.org/dox/group__TutorialMatrixArithmetic.html mal 
angucke, sieht dass ganze doch extrem einfach aus.

von Bastler (Gast)


Lesenswert?

Torsten R. schrieb:
> Und wenn ich mir die Beispiele hier:
> http://eigen.tuxfamily.org/dox/group__TutorialMatr... mal
> angucke, sieht dass ganze doch extrem einfach aus.

Ist es auch. Ich habe mich mal in eigen während meines Masters 
eingearbeitet, da ging es um Berechnung von Eigenwerten für eine 
Schwingungsanalyse.

Hatte die Analyse zunächst in Matlab entwickelt und anschließend auf C++ 
mit eigen portiert. War kaum ein Tag arbeit. Die Dokumentation ist 
außerdem sehr gut und bei doofen Fragen findet man per google schnell 
Antwort :)

von Nik B. (Gast)


Lesenswert?

Eigen ist wirklich zu empfehlen. - Ist zwar sehr maechtig, aber hat auch 
den Vorteil, dass einfache Sachen dennoch relativ schnell machbar sind.

Als Einstieg vielleicht die textuelle Quickreference:
https://eigen.tuxfamily.org/dox-devel/AsciiQuickReference.txt


Bsp Vektormultiplikation:
1
#include <Eigen/Dense>
2
3
int main(){
4
  Eigen::VectorXd a(2),b(2); //2 gibt die Dimension des Vekt an.
5
  a << 1,2; b<<2,1; //Vekt befuellen
6
  double resultDotProd = a.dot(b); // oder wahlweise auch einfach a.tranpose()*b;
7
  
8
  //Fuer das aeussere Prod. brauchts eine 2x2 Matrix
9
  Eigen::MatrixXd resultOuterProd(2,2);
10
  resultOuterProd = a * b.transpose();
11
}

lg

von TriHexagon (Gast)


Lesenswert?

Markus schrieb:
> das sieht interessant, aber auch etwas zu kompliziert aus.
> Die Library scheint ziemlich mächtig und aus irgendwelchen Gründen
> befindet sich der gesamte Code in Header-Files anstatt in cpp-Files. Das
> erscheint mir etwas seltsam.

Mhm, noch nicht viel Erfahrung mit C++?

Markus schrieb:
> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,
> Vektorprodukt und Drehoperatoren und das ganze sollte unter 1-2Kbyte
> Speicher belegen.

Ja dann ist die Library doch perfekt, es wird dank Templates nur das 
Kompiliert was du nutzt, nicht mehr und nicht weniger.

von Markus (Gast)


Lesenswert?

>Autor: Bastler (Gast)
>Torsten R. schrieb:
>> Und wenn ich mir die Beispiele hier:
>> http://eigen.tuxfamily.org/dox/group__TutorialMatr... mal
>> angucke, sieht dass ganze doch extrem einfach aus.

>Ist es auch. Ich habe mich mal in eigen während meines Masters
>eingearbeitet, da ging es um Berechnung von Eigenwerten für eine
>Schwingungsanalyse.

Es ist genau dann einfach und universell, wenn man es in ein ARDUINO 
Programm integrieren kann.
Dass das möglich ist, wage ich allerdings zu bezweifeln.

Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am 
Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das 
ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden, 
compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Markus schrieb:
> Es ist genau dann einfach und universell, wenn man es in ein ARDUINO
> Programm integrieren kann.
> Dass das möglich ist, wage ich allerdings zu bezweifeln.

Probier es aus! C++ hat den Vorteil, dass Du in der Regel für nix 
zahlst, was Du nicht auch nutzt. Würde mich wundern, wenn eine selbst 
gestrickte Lösung schneller und effektiver wäre. Wie gesagt, so etwas 
kann man selbst auf einem Cortex M0 einsetzen.

> Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am
> Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das
> ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden,
> compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.

Wo siehst Du jetzt den großen Unterschied zur Eigen-Library?

von Markus (Gast)


Lesenswert?

>Wo siehst Du jetzt den großen Unterschied zur Eigen-Library?

In der Einfachheit des Vorgangs. Laden, Compile-Knopf drücken .. läuft.

Zum ersten Ausprobieren ist es sehr gut, wenn man sich nicht um 
Verzeichnisse, Make-Files, Compilereinstellungen, welches Demo, 
Versionsnummern usw. kümmern muss.
Bei Apple würde es wohl "Usabillity" heißen.

>Probier es aus! C++ hat den Vorteil, dass Du in der Regel für nix
>zahlst, was Du nicht auch nutzt. Würde mich wundern, wenn eine selbst
>gestrickte Lösung schneller und effektiver wäre.

Verstehe mich nicht falsch. Ich habe keine Zweifel daran, dass die 
Eigen-Library ziemlich ausgereift und akademisch anspruchsvoll ist.
Meine Fragestellung ist nur:

- Ist sie schnell?
- braucht sie wenig Speicher?
- Läuft sie auf einem Cortex M0 mit minimalem Platz und 
Resourcenverbrauch?
- ist sie einfach zu integrieren?

Wenn es ein Beispiel für eine Arduino Zero gäbe, wäre die Frage ziemlich 
schnell beantwortet. Das ist auch die Philosophie des ARDUINO-Systems: 
Löse das Problem schnell und effektiv, vermeide unnötige Technikprobleme 
wie z.B. die lange Suche nach Compiler-Configurationen, falsche 
Pfadeinstellungen, nicht aufzufindende Abhängigkeiten, zu großer 
Ramspeicherbedarf usw.

Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der 
Eigen-Library beschäftigen muss, bis ich diese Fragen für mich 
beantworten kann. Dann investiere ich lieber einen halben Tag für die 
paar Funktionen die ich brauche und programmiere es selber.

von Markus (Gast)


Lesenswert?

Hier habe ich was gefunden. Es ist zwar kein C++ und spielt natürlich 
überhaupt nicht in der Eigen-Lib-Klasse, ist aber ziemlich einfach und 
übersichtlich:

http://www.mrt-prodz.com/blog/view/2015/05/tiny-3d-engine-on-the-atmega328-arduino-uno

Wer mag, kann es ja mal zeigen, wie "elegant" das mit der Eigen-Lib 
aussieht.

von Markus (Gast)


Lesenswert?

Der Vollständigkeit halber hier noch der direkte Link auf die 
GitHub-Lib:
https://github.com/mrt-prodz/ATmega328-Tiny-3D-Engine

von Dr. Sommer (Gast)


Lesenswert?

Markus schrieb:
> Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der
> Eigen-Library beschäftigen muss, bis ich diese Fragen für mich
> beantworten kann.

Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange? 
Letztens habe ich eine Library in ein Projekt eingebunden, die auf eigen 
basiert. Also musste Eigen in mein Projekt eingebunden werden. Das, 
wofür du eine Woche brauchen willst, beschränkt sich auf die Übergabe 
von 'pkg-config --cflags --libs eigen' an den Compiler. Dann noch ein 
include, und fertig. In einer Woche kann man alle 9000 Compiler Flags 
vom GCC lernen, Gott weiß warum du so lange brauchst um das einzige 
benötigte Flag -I zu finden, bzw. die Doku in der der pkg-config Aufruf 
steht.
Die Installation von eigen ist sogar noch einfacher als die von Arduino 
Libs, da sie unter Linux ruck zuck per Paketmanager installiert werden 
kann.

von Markus (Gast)


Lesenswert?

>Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange?
>Letztens habe ich eine Library in ein Projekt eingebunden, die auf eigen
>basiert

Na dann mach mal und binde die Lib mal schnell in eine kleines 
Arduino-Demo ein bevor alles nur leeres Gewäsch ist.

von Dr. Sommer (Gast)


Lesenswert?

Markus schrieb:
> Na dann mach mal und binde die Lib mal schnell in eine kleines
> Arduino-Demo ein bevor alles nur leeres Gewäsch ist.

Keine Ahnung wie man bei Arduino Compiler-Flags eingibt. Ich hab es 
daher so gemacht:
* In Eclipse ein Projekt für den STM32F051 angelegt
* In den Projekt-Einstellungen zu den Compiler-Flags `pkg-config 
--cflags eigen3` hinzugefügt
Fertig. Jetzt kann Eigen verwendet werden. Hat 5 Minuten gedauert. So 
schnell kriegst du keine Matrix-Algorithmen implementiert.

Hier noch ein sinnloses Dummy-Programm zur Demonstration dass es 
funktioniert:
1
#include <Eigen/Dense>
2
3
volatile float x;
4
5
int main () {
6
  Eigen::Matrix<float, 2, 2> m;
7
  m(0, 0) = 3;
8
  m(1, 0) = 2.5;
9
  m(0, 1) = -1;
10
  m(1, 1) = m(1, 0) + m(0, 1);
11
12
  Eigen::Matrix<float, 2, 1> v;
13
  v(0, 0) = 1;
14
  v(1, 0) = 2;
15
16
  Eigen::Matrix<float, 2, 1> w = m * v;
17
18
  while (1) {
19
    // Dummy-Ausgabe
20
    x = w(0);
21
    v += w;
22
    w = m * v;
23
  }
24
}

Wenn du rausfindest wie man der Arduino-IDE Compiler-Flags eingibst, 
kannst du es 1:1 so machen. Aber dem TO ging es überhaupt nicht um 
Arduino, daher passt das so...

von Markus (Gast)


Lesenswert?

Dr. Sommer schrieb
>Ich hab es daher so gemacht:
Danke für die Code-Beispiele.

>Keine Ahnung wie man bei Arduino Compiler-Flags eingibt.

Siehst Du, genau an diesem Punkt unterscheidet sich die Theorie von der 
Praxis.

Theoretisch ist es leicht und es geht, nur in der Praxis geht es 
nicht.

Deshalb möchte ich mir erlauben, Dir für die Zukunft zu empfehlen, etwas 
weniger voreilig in der Wortwal zu sein:

Dr. Sommer schrieb:
>Äh, was? Bist du geistig eingeschränkt oder warum braucht das so lange?

von Dr. Sommer (Gast)


Angehängte Dateien:

Lesenswert?

Markus schrieb:
> Theoretisch ist es leicht und es geht, nur in der Praxis geht es
> nicht.

Jetzt habe ich extra für dich herausgesucht, wie man in Arduino 
Libraries erstellt. Auch das hat keine Woche gedauert:
1. Aktuelle Eigen Version ( 
http://bitbucket.org/eigen/eigen/get/3.2.8.tar.bz2 ) herunterladen
2. Archiv entpacken
3. Den entpackten Ordner von "eigen-eigen-07105f7124f9" nach "Eigen3" 
umbenennen
4. Alles im Ordner löschen außer dem Unterordner "Eigen"
5. Eine Datei namens "Eigen3.h" im Ordner "Eigen3" anlegen, und 
hineinschreiben:
1
#pragma push_macro("max")
2
#pragma push_macro("min")
3
#pragma push_macro("B1")
4
#pragma push_macro("B2")
5
#pragma push_macro("B3")
6
7
#undef max
8
#undef min
9
#undef B1
10
#undef B2
11
#undef B3
12
13
#include <Eigen/Eigen>
14
15
#pragma pop_macro("max")
16
#pragma pop_macro("min")
17
#pragma pop_macro("B1")
18
#pragma pop_macro("B2")
19
#pragma pop_macro("B3")
Dies ist erforderlich, da die Arduino IDE Makros definiert, die den 
Eigen-Code verwirren. Hier sieht man sehr deutlich die Probleme, die die 
völlig unnötige Nutzung von Makros statt Funktionen/Konstanten 
verursachen.
6. Den gesamten Eigen3 Ordner in den "libraries" Ordner im Sketchbook, 
also zB $HOME/sketchbook/libraries, verschieben.

Fertig. Jetzt kann man einen Beispiel-Arduino-Sketch anlegen:
1
#include <Eigen3.h>
2
3
4
volatile float x;
5
6
void setup() {
7
  Eigen::Matrix<float, 2, 2> m;
8
  m(0, 0) = 3;
9
  m(1, 0) = 2.5;
10
  m(0, 1) = -1;
11
  m(1, 1) = m(1, 0) + m(0, 1);
12
13
  Eigen::Matrix<float, 2, 1> v;
14
  v(0, 0) = 1;
15
  v(1, 0) = 2;
16
17
  Eigen::Matrix<float, 2, 1> w = m * v;
18
19
  while (1) {
20
    // Dummy-Ausgabe
21
    x = w(0);
22
    v += w;
23
    w = m * v;
24
  }
25
}
26
27
void loop() {
28
  // put your main code here, to run repeatedly:
29
  delay(1000);
30
  digitalWrite (13, HIGH);
31
  delay (1000);
32
  digitalWrite (13, LOW);
33
}
Und für einen der ARM-Arduinos, wie den Arduino Zero, kompilieren.

Für geistig eingeschränkte wie dich habe ich den genannten "Eigen3" 
Ordner noch als ZIP-Archiv angehängt. Das kannst du in der Arduino-IDE 
mit "Sketch->Include Library->Add .ZIP Library..." automatisch 
entpacken, sodass du direkt mit dem Sketch-Schreiben beginnen kannst.

Im ganzen Thread ging es überhaupt nicht um Arduino. Nur du hast damit 
angefangen, wie toll alles bei Arduino ist, und ich hatte dir gezeigt 
wie einfach es mit G++/Eclipse geht. Eine IDE, bei der man nichtmal 
Compiler-Flags eingeben kann, als Maß aller Dinge zu nehmen, finde ich 
etwas unrealistisch. Aber wie du siehst, ist es auch bei Arduino mit 
etwas mehr Frickelei schnell möglich. Selbst ein Genie hätte in der Zeit 
keine Matrix-Library mit allen nötigen Tests usw. implementieren können.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo Markus,

ich finde es schon gelinde gesagt etwas unhöflich, zuerst

>Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf
>kleineren ARM-Controllern verwendet werden kann?
>Ich brauche ein paar Standard-Funktionen wie Multiplikation und
>Betragsbildung und will das Rad nicht neu erfinden.

nach einer c++ Standard Bibliothek zu fragen. Und dann, nachdem die 
hilfsbereiten Menschen hier genau diesen Wunsch passend und schnell 
erfüllt haben damit herauszurücken, dass es um eine schlüsselfertige 
Arduino-Bibliothek geht.

Frech!

vlg
 Timm

von Dr. Sommer (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Aber dem TO ging es überhaupt nicht um Arduino, daher passt das so...
Dr. Sommer schrieb:
> Im ganzen Thread ging es überhaupt nicht um Arduino.

Timm R. schrieb:
> ich finde es schon gelinde gesagt etwas unhöflich...
Huch, Markus ist ja der TO :D Das machts natürlich noch besser... Na 
eine schlüsselfertige und sehr mächtige Arduino-Library hat er jetzt ja 
mit Eigen...

von Markus (Gast)


Lesenswert?

>Für geistig eingeschränkte wie dich habe ich den genannten "Eigen3"
>Ordner noch als ZIP-Archiv angehängt.

Vielen Danke für das Zip-File, das hilft mir sehr weiter.

Hier habe ich noch ein kleines Liedchen für Dich gefunden:
https://www.youtube.com/watch?v=dapqMeQCdcs

von Markus (Gast)


Lesenswert?

Timm Reinisch (Firma: privatfrickler.de) (treinisch)
>Hallo Markus,

>ich finde es schon gelinde gesagt etwas unhöflich, zuerst

>>Gibt es eine Standard Library für 3D Vektoren in C++, welche gut auf
>>kleineren ARM-Controllern verwendet werden kann?
>>Ich brauche ein paar Standard-Funktionen wie Multiplikation und
>>Betragsbildung und will das Rad nicht neu erfinden.

>nach einer c++ Standard Bibliothek zu fragen. Und dann, nachdem die
>hilfsbereiten Menschen hier genau diesen Wunsch passend und schnell
>erfüllt haben damit herauszurücken, dass es um eine schlüsselfertige
>Arduino-Bibliothek geht.

Hallo Timm,

es ging in dem Thread gar nicht speziell um die Arduino-Library. Arduino 
ist nur ein Prüfstein, mit dem sich zeigen lässt dass etwas einfach zu 
benutzten ist. Fast alle Dinge sind dort so gemacht, dass sie sich 
einfach benutzen und testen lassen. Dieses Prinzip der einfachen 
"Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.
Dr. Sommer hat hier eine gute Arbeit geleistet, so dass viele Nutzer die 
Libray jetzt ohne großen Aufwand testen können.
Allerdings muss ich sagen, dass ich seine Ausdrucksweise gelinde gesagt 
etwas "frech" finde.

>Frech!

von Kaj (Gast)


Lesenswert?

Markus schrieb:
> Siehst Du, genau an diesem Punkt unterscheidet sich die Theorie von der
> Praxis.
>
> Theoretisch ist es leicht und es geht, nur in der Praxis geht es
> nicht.
Das geht auch in der Praxis ganz einfach. Das einzige was hier der 
beschränkende Faktor ist, ist diese verkackte Arduino-IDE.
Nimm eine andere IDE, oder noch besser, einen Textedior deiner Wahl und 
ein Makefile, und das Problem ist gelöst.
Streng genommen gibt es nicht mal ein Problem, bzw. sind nicht die 
Compilerflags das Problem, sondern die Arduino-IDE.
Weil es nicht vorgesehen ist, das du da was ändern könnne sollst. Soll 
ja schließlich idiotensicher und für jeden ganz einfach benutzbar sein.

Wenn mans aber doch machen muss, kann man in der Datei platform.txt die 
Compilerflags eintragen...

von Kaj (Gast)


Lesenswert?

Markus schrieb:
> Dieses Prinzip der einfachen
> "Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.
Was können denn die Macher eines Projektes dafür, wenn Du nicht mit 
deinen Werkzeugen (IDE, Compiler usw.) umgehen kannst?

von user (Gast)


Lesenswert?

Markus schrieb:
> Arduino
> ist nur ein Prüfstein, mit dem sich zeigen lässt dass etwas einfach zu
> benutzten ist. Fast alle Dinge sind dort so gemacht, dass sie sich
> einfach benutzen und testen lassen. Dieses Prinzip der einfachen
> "Usability" stünde vielen Open-Source-Projekten gut zu Gesicht.

Arduino ist ein "Spielzeug" für alle, die sich nicht weiter in die 
Thematik einarbeiten wollen. Du kannst den Arduino Workflow nicht mit 
dem einer echten IDE vergleichen.
Desto einfacher die Programmierung/Nutzung ist, desto beschränkter ist 
man in den Möglichkeiten und genau an diese Grenze bist du mit der Lib 
gekommen.

von Steffen (Gast)


Lesenswert?

>Arduino ist ein "Spielzeug" für alle, die sich nicht weiter in die
>Thematik einarbeiten wollen.

Das erinnert mich ein wenig an diese Physiker, die immer behaupten, 
Chemie sei eigentlich überflüssig, weil am Ende doch alles irgenwie 
Physik sei. Wenn sie dann mit ihrem physikalischen Handwerkszeug 
konkrete Problemstellungen aus der Chemie lösen sollen, kommt dabei aber 
meist nichts brauchbares heraus. Jedenfalls nicht in überschauberer 
Zeit.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Markus schrieb:
> Gibt es eine Standard Library für 3D Vektoren in C++

Du suchtest eine Library. Eigen ist eine (Template-)Library, die
Tiny-3D-Engine

  https://github.com/mrt-prodz/ATmega328-Tiny-3D-Engine

die ich im Folgenden mit T3DE abkürzen werde, nicht. T3DE ist eine
fertige Anwendung zur Animation vordefinierter Mesh-Modelle. Du kannst
darraus natürlich den für dich relevanten Quellcode heraus- und
in deine eigene Anwendung hineinkopieren. Das ist aber sicher nicht
einfacher, als an den Anfang des Programms ein

1
#include <Eigen/Dense>

zu schreiben und ggf. den Include-Pfad passend zu setzen.

Markus schrieb:
> Ich brauche ein paar Standard-Funktionen wie Multiplikation und
> Betragsbildung und will das Rad nicht neu erfinden.

Eigen hat Betragsbildung, T3DE nicht.

Markus schrieb:
> Ich brauche eigentlich nur wenige Funktionen wie Skalarprodukt,
> Vektorprodukt und Drehoperatoren

Eigen hat das alles, in T3DE fehlen Skalarprodukt und Vektorprodukt
komplett, Drehungen sind nur um die Koordinatenachsen möglich.

Markus schrieb:
> Das Problem bei solch einer Bibliothek ist grundsätzlich, dass man am
> Anfang nicht weiß, ob sie für das eigene Problem zu gebrauchen ist. Das
> ist z.B. bei den ARDUINO-Libs sehr gut gelöst: einfach laden,
> compilieren, ausprobieren fertig. Eine Sache von ein paar Minuten.

Festzustellen, dass T3DE deinen Anforderungen nicht entspricht, dauert
für dich vermutlich deutlich länger als ein paar Minuten. Die
3D-Animation laufen zu lassen ist sicher kein Problem. Aber bist du
danach gescheiter also vorher? Das Einzige, was du dann weißt, dass die
enthaltenen Vektor- und Matrixfunktionen für exakt jene 3D-Animationen
wie in der Demo geeignet ist.

Nur noch ein paar Dinge, die mich persönlich an T3DE stören würden:

- Es fehlen die meisten Grundfunktionen für Vektoren und Matrizen.

- Da für Sinus und Cosinus Look-Up-Tabellen verwendet werden, ist die
  Winkelauflösung für Rotationen nur 1°. Für Animationen mag das
  reichen, für viele andere Anwendungen ist das zu grob.

- Sämtliche Operationen (Skalierung, Translation und Rotation) werden
  auf eine 4×4-Matrix-Multiplikation zurückgeführt, was sehr ineffzient
  ist.

- Da Rotationen nur um die Koordinatenachsen möglich sind, muss eine
  Rotation um eine andere Achse aus drei Einzelrotationen
  zusammengesetzt werden, was ebenfalls sehr ineffzient ist.

- usw., wenn man ernsthaft damit arbeiten würde, würden einem sicher
  noch weitere Dinge negativ auffallen.

Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber
herauszufinden? Wirklich nur ein paar Minuten?

Programmieren ist eben trotz Arduino & Co. schon noch etwas mehr als nur
Copy/Paste ;-)


Markus schrieb:
> Gibt es eine Standard Library für 3D Vektoren in C++

Markus schrieb:
> Es ist genau dann einfach und universell, wenn man es in ein ARDUINO
> Programm integrieren kann.
> Dass das möglich ist, wage ich allerdings zu bezweifeln.

Markus schrieb:
> Wenn es ein Beispiel für eine Arduino Zero gäbe, wäre die Frage ziemlich
> schnell beantwortet.

Markus schrieb:
> Na dann mach mal und binde die Lib mal schnell in eine kleines
> Arduino-Demo ein bevor alles nur leeres Gewäsch ist

Markus schrieb:
> es ging in dem Thread gar nicht speziell um die Arduino-Library.

Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute
ganz schön an der Nase herum.

von Markus (Gast)


Lesenswert?

>Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute
>ganz schön an der Nase herum.

Ich weiß ehrlich gesagt nicht, was Du meinst.
Ich halte die Integration einer Library in die Arduino-Umgebung nach wie 
vor für einen hervorragenden Test.

Es kann damit nämlich gezeigt werden, dass

- eine Library wenig Speicher verbraucht ( Arduino Uno, 32KFlash, 2kRam)
- dass sie auch für 8Bit Prozessoren geeignet ist

und bei richtiger Integration der Library:

- Der One-Click-Test auf Eignung

>Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber
>herauszufinden? Wirklich nur ein paar Minuten?

Wie kommst Du auf den schmalen Grad? Gefühlsmässig habe ich dazu eine 
viertel Stunde gebraucht. Was mich an den Routinen gestört hat, ist das 
verwenden fester Typen und die starre Struktur.

Meiner Meinung nach sind solche Threads sehr nützlich zu 
Materialsammlung. Das ist, was jeder Student lernt: Erst die Analyse des 
Standes der Technik durch umfangreiche Materialrecherche.

Wenn ich mir diesen Thread so anschaue, gibt es genau einen Vorschlag: 
Die "Eigen Library" und ich kann mir kaum vorstellen, dass dies wirklich 
die einzige Software dieser Art ist.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Markus schrieb:
>>Vielleicht ist es ja keine böse Absicht, aber du führst hier die Leute
>>ganz schön an der Nase herum.
>
> Ich weiß ehrlich gesagt nicht, was Du meinst.
> Ich halte die Integration einer Library in die Arduino-Umgebung nach wie
> vor für einen hervorragenden Test.

Ok, das ist jetzt im Nachhinein klar. Aber zwischen deinen Beiträgen vom
15.05.2016 18:43 (wo du das ersten Mal den Arduino ins Spiel brachtest)
und vom 19.05.2016 10:14 (wo du erklärtest, dass der Arduino nur der
Prüfstein sein soll), ging ich (und offensichtlich auch andere) davon
aus, das der Arduino das Zielsystem ist.

Mehr noch: Deine weiteren Beiträge ließen annehmen, dass die Bibliothek
als vorgefertigtes Paket mit allen Arduino-spezifischen Compiler- und
Linker-Einstellungen verfügbar sein soll, was die Auswahl natürlich sehr
einschränkt.

Markus schrieb:
>>Jetzt mal Hand auf's Herz: Wie lange hättest du gebraucht, um das selber
>>herauszufinden? Wirklich nur ein paar Minuten?
>
> Wie kommst Du auf den schmalen Grad? Gefühlsmässig habe ich dazu eine
> viertel Stunde gebraucht.

Die folgende Aussage erweckte aber den Eindruck, dass du in der
Beurteilung fremder Software noch nicht ganz so fit bist:

Markus schrieb:
> Das Problem ist hier nur, dass ich mich vermutlich eine Woche mit der
> Eigen-Library beschäftigen muss, bis ich diese Fragen für mich
> beantworten kann.

Und wenn du tatsächlich in einer Viertelstunde herausgefunden hast, dass
der Code für dich nicht taugt, warum hast du das dann nicht gleich mit
dazu geschrieben? So musste man davon ausgehen, dass dieser Code deinen
Wünschen voll entspricht und du nur noch weitere Alternativen mit
ähnlichem Funktionsumfang suchst.

Markus schrieb:
> Wenn ich mir diesen Thread so anschaue, gibt es genau einen Vorschlag:
> Die "Eigen Library"

Die Eigen ist halt die wahrscheinlich verbreitetste Lineare-Algebra-
Bibliothek für C++. Es gibt davon sogar einen Branch für AVR-Arduinos,
der zeigt, dass die Bibliothek auf AVRs tatsächlich lauffähig ist.
Allerdings scheint das Prohekt eingeschlafen zu sein:

  https://github.com/vancegroup/EigenArduino

> und ich kann mir kaum vorstellen, dass dies wirklich die einzige
> Software dieser Art ist.

Du kannst dir auch noch die Armadillo-Bibliothek anschauen, die dir aber
vermutlich genauso wenig zusagen wird wie die Eigen:

  http://arma.sourceforge.net/


Markus schrieb:
> Dann investiere ich lieber einen halben Tag für die paar Funktionen
> die ich brauche und programmiere es selber.

Wenn du tatsächlich nur die paar von dir genannten Funktionen brauchst,
frage ich mich wirklich, warum du das nicht schon längst getan hast. Das
ist auf jeden Fall weniger Aufwand als

- erst hier im Forum nachzufragen,
- mit anderen herumzudiskutieren,
- (vielleicht) einen Kandidaten zu finden, der wenigstens halbwegs
  passend ist und
- diesen Kandidaten schließlich noch an die eigenen Bedürfnisse
  anzupassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.