ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4420511
Jetzt (Chat):
30 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Algorithmen und Datenstrukturen
Komplette MatheBibliothek
GepinntSeite: < 1 2 3 4 5 . . . a 17 18 19 20 21 >
AutorThema
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

Zitat:
Util-Funktionen == Mini-Utils?


jo, oder gibts noch andere sachen die ich jetzt vergessen habe?

Zitat:
Vielleicht kann ich auch noch AABB machen, von den anderen hab ich keine Ahnung.

erstmal abwarten TheLord hatte am anfang geschrieben, dass er folgende sachen schon hat.

Ray
AABB
OBB
Plane
Polygon

dabei gehts ja vor allem um die kollision zwischen diesen objekten. wenn er die zur verfügung stellt, wären nurnoch sphere und frustum zu machen, was wirklich wenig arbeit sein dürfte...
mal schauen.
26.06.2004, 22:15:03 Uhr
DirectX 10
Mr.DX Offline
ZFX'ler


Registriert seit:
01.08.2002

Bayern
297101048
Re: Komplette MatheBibliothekNach oben.
Wird das Ergebnis eigentlich auch Nicht-Mitgliedern (also die nicht mitcoden) mal online gestellt?
27.06.2004, 08:54:42 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

ich dachte, wir stellen das jedem zur verfügung. auch für leute die nichtmal bei zfx angemeldet sind.
27.06.2004, 09:08:35 Uhr
DirectX 10
Kimmi Offline
ZFX'ler


Registriert seit:
10.10.2002

Schleswig-Holstein
93425079
Re: Komplette MatheBibliothekNach oben.
Melde mich erst mal nur zum Schreiben von Test-Applkationen an, da in der ZFXCE gerade recht viel Arbeit anfällt und meine Freizeit bedauerlicherweise nicht mehr wird.

MfG Kimmi
28.06.2004, 08:45:27 Uhr
Kurzer Weblog
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
TheLord scheint zur Zeit nicht online zu sein.
Ich schreib ihm mal ne Mail, er soll mal wieder in den Thread schauen.

Ich hab schon mal die erste Version von den Util-Funktionen:
Math.h
Math.inl

Wer schreibt den das cfg-File für Doxygen?
Ich könnte es versuchen, habs aber noch nie gemcht.
03.07.2004, 19:34:28 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.
nicht schlecht, aber ne sign-funktion fehlt noch. -1 bei negaiven zahlen 0 bei 0 und 1 bei positiven zahlen.

1 Mal gendert, zuletzt am 03.07.2004, 20:18:37 Uhr von Richard Schubert.
03.07.2004, 20:17:56 Uhr
DirectX 10
TheLord Offline
ZFX'ler


Registriert seit:
15.01.2003

Nordrhein-Westfalen
260782128
Re: Komplette MatheBibliothekNach oben.
So, ich bin auch wieder da. Tut mir leid, das es etwas länger gedauert hat, aber ich hatte in letzter Zeit für meinen Geschmack ein wenig zu viel zu tun

Also mein Angebot für Matrix, Vector, Obb, Aabb, etc. vom Anfang des Threads steht natürlich noch. Inzwischen kann ich auch noch einen kleinen 2d-Teil anbieten, der Rechtecke (momentan nur aa), Kreise und Liniensegmente bietet. Dazu gibts jeweils Schnitt-/Entfernungs- und Inhaltsfunktionen, ist aber alles noch nicht so sehr optimiert.

Ich kann meine Klassen wohl zur Verfügung stellen, muss aber erst noch ein paar Sachen ändern (vor allem die Dokumentation und die Namensgebung der Klassen).

Vorher müssen wir aber noch ein paar Sachen abklären:
1. Soll es sowas wie eine Klassenhierachie (wie bei der X-Engine) geben oder alles Stand-alone?
2. Wie sieht das mit SSE-/PlugIn-Support aus? Wenn Interesse besteht könnte ich dazu mal mein System vorstellen.
3. Wie geht man mit einem solchen Fall um:
OBB::Intersects(AABB) und AABB::Intersects(OBB)
Man will ja schließlich nicht den Algorithmus zweimal schreiben. Dazu habe ich mir auch schon was überlegt, was könnte. Damit hätte man dann ein einheitliches System in der ganzen Mathebibliothek.

mfg,
TheLord
04.07.2004, 14:21:10 Uhr
Mr.DX Offline
ZFX'ler


Registriert seit:
01.08.2002

Bayern
297101048
Re: Komplette MatheBibliothekNach oben.
Zu OBB::Intersects(AABB) und AABB::Intersects(OBB):
Ich habe das so gelöst, das die Funktion nur in einer Klasse implementiert wird und die anderen diese im Funktionsaufruf verwenden, z.B.

OBB::InserectsAABB ist implementiert und AABB:InserechtsOBB macht folgendes

Code:
InserectsOBB(COBB obb)
{
return obb.InserechtsAABB(this);
}
04.07.2004, 14:37:02 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.
jo supi.

1. wüsste jetzt nicht wo wir da was unterteilen sollten.
2. klar, zeig mal. kann ja nicht schaden.
3. wenn du einen beseeren vorschlag als Mr.DX hast, dann wollen wir den natürlich auch wissen.
04.07.2004, 15:14:55 Uhr
DirectX 10
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Hi,
ich könnte dir beim umschreiben helfen. Hab zur Zeit nichts zu tun.

1. Wie könnte man den eine Klassenhierachie machen? Ich kann mir darunter nicht vorstellen.

2. Für SSE-Optimierung etc. könnte man einfach Funktionspointer verwenden, die in einer Init-Funktion gesetzt werden. Das ist schnell und einfach.

3. Man könnte es so machen, wie es Mr.DX gesagt hat. Man könnte es auch in das Funktionspointer-System integrieren. Wie würdest du es lösen?

Ich hab auch schon mal am Multiply/Matrix44-Stack gearbeitet:
MultiplyStack.h
MultiplyStack.inl
Matrix44Stack.h
04.07.2004, 16:30:54 Uhr
TheLord Offline
ZFX'ler


Registriert seit:
15.01.2003

Nordrhein-Westfalen
260782128
Re: Komplette MatheBibliothekNach oben.
Erstmal zu 3.
Also die Methode von Mr.DX ist etwas einfacher und daher vielleicht auch besser. Das hier ist meine Methode mittels Templatespezialisierung.

Basis für alle Algotihmen zur Bestimmung von Schnitt/Distanz:
Code:
namespace Private
{
    templateclass _vcType, class _tobj1, class _tobj2>
    class TIntersectionImpl
    {
        friend _tobj1;
        friend _tobj2;

    protected:
        inline static cxBool Intersects(const _tobj1& obj1, const _tobj2& obj2,
                    _vcType* pPoint)
        {
            throw std::logic_error(\"Intersectionalgorithm not implemented!\");
            return CX_FALSE;
        }

        inline static _Ty Distance(const  _tobj1& obj1, const  _tobj2& obj2)
        {
            throw std::logic_error(\"Distancealgorithm not implemented!\");
            return 0.0;
        }

        inline static cxBool Obj1ContainsObj2(const _tobj1& obj1, const _tobj2& obj2)
        {
            throw std::logic_error(\"Contentagorithm not implemented (Obj1 in Obj2)!\");
            return CX_FALSE;
        }

        inline static cxBool Obj2ContainsObj1(const _tobj2& obj1, const _tobj1& obj2)
        {
            throw std::logic_error(\"Contentagorithm not implemented (Obj2 in Obj1)!\");
            return CX_FALSE;
        }

    };
}


Hier eine Implementierung für Rechteck (AA) und Kreis:
Code:
namespace Private
{
    templateclass _vcType>
    class TIntersectionImpl<_Ty, _vcType, Rect<_Ty>, Circle<_Ty> >
    {
    public:
        static cxBool Intersects(const Rect<_Ty>& obj1, const Circle<_Ty>& obj2,
            _vcType* pPoint)
        {
            for(uint32 i=0; i<4; i++)
                if(obj2.Intersects(obj1.GetBound(i)))
                    return CX_TRUE;

            return CX_FALSE;
        }

        static cxFloat Distance(const Rect<_Ty>& obj1, const Circle<_Ty>& obj2)
        {
            _vcType vCentre((obj1.m_vMax.x+obj1.m_vMin.x)/
                        (_Ty)2.0, (obj1.m_vMax.y+obj1.m_vMin.y)/(_Ty)2.0);

            return (obj2.m_vCentre-vCentre).Length();
        }
                
        static cxBool Obj1ContainsObj2(const Rect<_Ty>& obj1, const Circle<_Ty>& obj2)
        {
            if(!obj1.VectorInRect(obj2.m_vCentre))
                return CX_FALSE;

            for(uint32 i=0; i<4; i++)
                if(obj2.Intersects(obj1.GetBound(i)))
                    return CX_FALSE;

            return CX_TRUE;
        }

        static cxBool Obj2ContainsObj1(const Circle<_Ty>& obj1, const Rect<_Ty>& obj2)
        {
            return (cxBool)(PointInCircle(obj1, obj2.m_vMin) && 
                        PointInCircle(obj1, obj2.m_vMax) &&
                        PointInCircle(obj1, obj2.TopRight()) &&
                        PointInCircle(obj1, obj2.BottomLeft()));
        }

    protected:
        static cxBool PointInCircle(const Circle<_Ty>& circle, const _vcType& vc)
        {
            return (cxBool)((circle.m_vCentre-vc).SqrLength() <
                        circle.m_rRadius*circle.m_rRadius);
        }
    };
}


Und das ganze wird dann so von den Klassen aus benutzt:
Code:
//Rechteck:
templateclass _vcType>
cxBool Rect<_Ty, _vcType>::Intersects(const Circle<_Ty, _vcType>& inCircle)
{
    return Private::TIntersectionsImpl<_Ty, _vcType, Rect<_Ty, _vcType>, Circle<_Ty, _vcType> >::Intersects(*this, inCircle);
}

//Kreis:
templateclass _vcType>
cxBool Circle<_Ty, _vcType>::Intersects(const Rect<_Ty, _vcType>& inRectangle)
{
    return Private::TIntersectionsImpl<_Ty, _vcType, Rect<_Ty, _vcType>, Circle<_Ty, _vcType> >::Intersects(inRectangle, *this);
}

Ich habe das hauptsächlich so gemacht, um mal Templatespezialisierung richitg auszuprobieren. Wie gesagt wäre Mr. Dxs Methode mindestens genauso geeignet.
04.07.2004, 17:21:11 Uhr
nufan Offline
ZFX'ler


Registriert seit:
13.05.2002

Deutschland
Re: Komplette MatheBibliothekNach oben.
Zitat:
OBB::InserectsAABB ist implementiert und AABB:InserechtsOBB macht folgendes.


Inserects ?
Inserechts ?
Intersects ?
Egal.
05.07.2004, 00:52:02 Uhr
Kimmi Offline
ZFX'ler


Registriert seit:
10.10.2002

Schleswig-Holstein
93425079
Re: Komplette MatheBibliothekNach oben.
@TheLord: Einige Fragen von meiner Seite:
- Du nutzt als unsigned int uin32, gibt es dafür Gründe?
- cx Prefix steht für was? Und wo sind die Deklarationen der eigenen Datentypen untergebracht (z.B. cxBOOL).
- Alle Methoden sind als static deklariert. Auch wenn ich mir den Grund denken kann, wäre es nett, wenn du deine Gründe noch einmal kurz erläutern könntest. Man lernt schliesslich nie aus.

Dazu noch eine Bitte von meiner Seite:
Code:
return (cxBool)((circle.m_vCentre-vc).SqrLength() <
                        circle.m_rRadius*circle.m_rRadius);

Zur besseren Lesbarkeit könnte man diesen Check in mehreren Zeilen dürchführen. Dann kann ich besser nachvollziehen, was du in dem Check tust. Auch wenn das beim Schreiben des Codes länger dauert, beim Debuggen bringt das recht viele Vorteile mit sich.
Dazu greifst du direkt auf das Attribut m_vCentre zu. Wäre da nicht ein Methodenzugriff sinnvoller? Wenn man Daten ohne Interface direkt accessieren kann, sorgt das bei Umarbeitungen der Datenmodelle (hier ist das noch sehr trivial, aber das muss ja nicht so bleiben) für gehörigen Mehraufwand.
Das mag sicherlich alles rel. pingelig sein, aber besser mal drüber gesprochen als nicht, gelle .

MfG Kimmi


1 Mal gendert, zuletzt am 05.07.2004, 10:33:08 Uhr von Kimmi.
05.07.2004, 10:31:49 Uhr
Kurzer Weblog
TheLord Offline
ZFX'ler


Registriert seit:
15.01.2003

Nordrhein-Westfalen
260782128
Re: Komplette MatheBibliothekNach oben.
Hallo,
für Kritik bin ich natürlich jeder Zeit offen.
Erstmal zu den allgemeinen Fragen:
Ich benutze wie man sieht eigene Datentypen (z. B. uint32, cxBool). Das sind alles typedefs in einer externen Datei ("TypeLib.h"). Das hängt damit zusammen, dass ich zu faul bin jedes mal unsigned __int32 zu tippen, ich mir aber sicher sein will, dass die Variable wirklich 32Bit groß ist. Außerdem ist AFAIK __int32 nur unter VC++ verfügbar, so dass ich unter anderen Compilern mittels Precompiler andere typedefs einbinden kann. Schließlich finde ich uint32 auch einfach übersichtlicher als unsigned __int32.

Das Prefix CX steht für meine Engine (ja, sowas hab ich auch ). Alle Klassen sind im Projekt auch in einem Namespace CX.
Für unsere Mathebibliothek würde ich dann die Namespaces umbenennen und wegen der Datentypen müssen wir uns einigen. Es gibt ja Suchen & Ersetzen

Wegen den static-Methoden:
Eigentlich sind ja Intersects()/Contains() usw. unabhängige Methoden. Das Problem ist aber dass VC++ keine partielle Templatespezialisierung bei einzelnen Funktionen unterstützt, deshalb die Klasse TIntersectionImpl. static sind die Methoden, da es sich ja nur um einzelne Algorithmen handelt. Daher macht es keinen Sinn mehrere solcher Algorithmen-Objekte zu erstellen. AFAIK heißt dieses Pattern Monotype.

Wegen der Lesbarkeit:
Ich gebe dir Recht, dass es durchaus Sinn macht das ganze in mehrere Zeilen aufzuteilen. Auch Kommentare würden einen erheblichen Teil zur Lesbarkeit beitragen, bin aber noch nicht dazu gekommen .
Wegen m_vCentre und co. macht es wahrscheinlich auch Sinn Methoden zu nehmen. Ich dachte nur in diesem Fall hat der Benutzer eh absoluten Lese- und Schreibzugriff auf die Attribute, ohne dass die Klasse das mitbekommen muss. Kann ich aber ohne große Probleme ändern. Es müssen sowieso noch große Teile ergänzt & kommentiert werden.

@Florianx:
Zur Klassenhierachie:
z. B. so:
Man nimmt eine Klasse Box mit Datentyp und Vektortyp als Template-Parameter (wie mein Rect oben). Davon könnte man jetzt eine Spezialisierung für den Vektortyp TVector3 ableiten und zusätzliche Funktionen für 3-dimensionale Boxen einfügen (z. B. Culling am Frustrum, etc). In der X-Engine Mathebilbiothek gibts auch so was in der Art.

So, das wars erstmal
05.07.2004, 16:58:25 Uhr
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Zitat:

partielle Templatespezialisierung

das sollten wir nicht verweden, da es nur von neusten Compilern unterstützt wird, bei VC .NET (also 7.0) und einigen anderen nicht.

1 Mal gendert, zuletzt am 05.07.2004, 18:35:48 Uhr von Florianx.
05.07.2004, 18:35:26 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.
wieso nicht?
der compiler ist frei erhältlich.
05.07.2004, 18:47:36 Uhr
DirectX 10
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
ich will aber nicht auf meine VS7.0-IDE verzichten.
Unterstützt der GCC denn schon partielle Templatespezialisierung?
Sind die denn so wichtig? Ich hab solche Dinger noch nie benutzt.
05.07.2004, 20:23:29 Uhr
Mastermind Offline
Knowledge-Admin


Registriert seit:
18.10.2002

Nordrhein-Westfalen
Re: Komplette MatheBibliothekNach oben.
der VC_Net.2003 Compiler ist glaube ich gemeint der sollte sich ins VS integrieren
05.07.2004, 20:45:41 Uhr
Work in Progress
Kimmi Offline
ZFX'ler


Registriert seit:
10.10.2002

Schleswig-Holstein
93425079
Re: Komplette MatheBibliothekNach oben.
Wenn jemand eine Probeanwendung schustern könnte, probiere ich es mit dem aktuellen gcc aus. Mir fehlt heute leider die Zeit, selbst in die Tasten zu hauen.

MfG Kimmi
06.07.2004, 08:41:03 Uhr
Kurzer Weblog
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Testanwendung
Code:
#include 
using namespace std;

template <class T1, class T2>
class TestClass
{ public: void Print() { cout << \"Normale Template\" << endl; } };

template <class T1>
class TestClassfloat>
{ public: void Print() { cout << \"Template mit T1=float\" << endl; } };

int main(int argc, char** argv)
{
TestClass<int,int>().Print();
TestClass<int,float>().Print();
return 0;
};
06.07.2004, 12:06:16 Uhr
Kimmi Offline
ZFX'ler


Registriert seit:
10.10.2002

Schleswig-Holstein
93425079
Re: Komplette MatheBibliothekNach oben.
Mit gcc version 3.3.3 (Debian 20040401) compiliert und tut es ohne Probleme.

MfG Kimmi
06.07.2004, 13:31:30 Uhr
Kurzer Weblog
Mr.DX Offline
ZFX'ler


Registriert seit:
01.08.2002

Bayern
297101048
Re: Komplette MatheBibliothekNach oben.
Ich habe noch eine Idee für die MatheLib, nämlich eine Klasse CColor, die das Rechnen von Farben erleichtert (Farbe umwandeln, Farbrechnen, ...)
11.07.2004, 12:21:39 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.
ja das könnte man in die utilsammlung einfügen, denn der 4D-Vector unterstützt ja schon die meisten funkionen. vielleicht auch mit unions arbeiten um eine wahlmöglichkeit wie in shadern zu haben.
xyzw -> rgba

vielleicht sowas wie
DWORD toDWORD( Vector4D v ) return ARGB;

1 Mal gendert, zuletzt am 11.07.2004, 12:27:53 Uhr von Richard Schubert.
11.07.2004, 12:27:31 Uhr
DirectX 10
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Wie siehts jetzt mit Webspace/CVS für den Code aus?
Wann werdet ihr die ersten Versionen eurers Codes fertig haben?
11.07.2004, 13:00:33 Uhr
TheLord Offline
ZFX'ler


Registriert seit:
15.01.2003

Nordrhein-Westfalen
260782128
Re: Komplette MatheBibliothekNach oben.
Also zu Color: Sowas kann ich auch anbieten, auch wenn es noch ein paar Erweiterungen vertragen könnte.

Wird aber leider noch etwas dauern, bis ich bei Mathe wieder anfangen kann, da jetzt zuerst mein eigenes Projekt fertig werden muss und ich danach erstmal im Urlaub bin. Hinterher mach ich dann aber weiter
11.07.2004, 13:56:51 Uhr
GepinntSeite: < 1 2 3 4 5 . . . a 17 18 19 20 21 >


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel