Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Radien von Spline

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Radien von Spline (3149 mal gelesen)
Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 13. Feb. 2010 15:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe einen 3-Dimensionalen Spline und von dem möchte ich alle a-Einheiten den Radius des Spline in xy, xz und xyz-Richtung bestimmen.

also sowas in der Art:
for i as long to splinelänge step a
  msgbox splineRadius(x,y)
  msgbox splineRadius(x,z)
  msgbox splineRadius(x,y,z)
end for

nur leider gibt es weder eine Funktion um die Länge eines Spline abzufragen noch eine Funktion für den Radius. Hat jemand eine Idee?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 13. Feb. 2010 18:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> nur leider gibt es weder eine Funktion um die Länge eines Spline
>> abzufragen noch eine Funktion für den Radius

Bei der Länge kann ich Dir nicht rechtgeben, Du kannst die Spline in einen Typ DatabaseServices.Curve casten und damit stehen Dir Längen und Parameter zur Verfügung.

Leider sehe ich das mit dem Radius wie Du, aber da mach ich Autodesk keinen Vorwurf, denn eine Spline verfügt nicht über bzw. besteht nicht aus Kreisbögen (aus mathematischer Sicht) und damit gibt's auch keinen Radius.

Eine Annäherung könntest Du erzielen, wenn Du vom Punkt auf der Spline, einen Schritt entlang der Spline nach vorne und einen nach hinten Temporärpunkte rechnest, diese 3 Punkte dann zur Konstruktion eines temporaeren Bogens verwendest, der hat dann einen Radius.

HTH, - alfred -

------------------
www.hollaus.at

Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 13. Feb. 2010 18:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

An die Sache mit den 3 Punkten mit minimalem Abstand hab ich auch schon gedacht. Wenn meine 3 Punkten im Raum liegen kann ich daraus ja einen Bogen machen und ich habe den Radius im Raum. Wie bekomm ich den Radius am schlausten in der xy-Richtung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 13. Feb. 2010 18:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Wie bekomm ich den Radius am schlausten in der xy-Richtung

Die Punkt vor Erstellung des Bogens auf Z=0 umrechnen.

- alfred -

------------------
www.hollaus.at

Christian Blei
Mitglied



Sehen Sie sich das Profil von Christian Blei an!   Senden Sie eine Private Message an Christian Blei  Schreiben Sie einen Gästebucheintrag für Christian Blei

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 14. Feb. 2010 12:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gloem 10 Unities + Antwort hilfreich

Hi,

ich weiss zwar nicht worum es geht, aber gibt nicht die zweite Ableitung in einem Kurvenpunkt den Krümmunsgradius an diesem Punkt an? Den bekommt man mit

> Autodesk.AutoCAD.DatabaseServices.Curve.GetSecondDerivative() as Vector3d<

Die Radien in den X,Y,Z Richtungen müssten dann Vector3d.X etc sein.
Vielleicht liege ich ja auch falsch.


Gruss
Christian Blei

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Ehrenmitglied V.I.P. h.c.
Maschinenbaukonstrukteur



Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2004DX Mechanical PP

erstellt am: 14. Feb. 2010 13:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gloem 10 Unities + Antwort hilfreich


Ex-Mitglied

erstellt am: 14. Feb. 2010 14:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ok, ich geh irgendwann mal über GetXXXDerivative lernen 

- alfred -

------------------
www.hollaus.at

Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 22. Feb. 2010 13:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab es jetzt mal folgendermaßen nach Casten in ein Curve-Objekt und Berechnung der Krümmung nach dem Wikipediaartikel versucht:
Code:
        <CommandMethod("getSplineRadiuses")> _
        Public Sub getSplineRadiuses()

            Dim editor As Editor = Application.DocumentManager.MdiActiveDocument.Editor

            '---------------------------------------------------------------
            ' Auswahl der Spline
            '---------------------------------------------------------------

            ' Splines auch auf gesperrten Layern
            Dim getSplineOptions As New PromptEntityOptions(ControlChars.CrLf & "Bitte den zu überprüfenden Spline auswählen: ")
            getSplineOptions.SetRejectMessage(ControlChars.CrLf & "Es sind nur Splines erlaubt")
            getSplineOptions.AddAllowedClass(GetType(Spline), False)
            getSplineOptions.AllowObjectOnLockedLayer = True

            ' Auswahl der Messungslinie durch den Benutzer
            Dim getSplineResult As PromptEntityResult = Editor.GetEntity(getSplineOptions)

            ' Abbruch der Funktion durch Benutzer
            If (getSplineResult.Status = PromptStatus.Cancel) Then
                ' Beenden der Methode
                Exit Sub
            ' Ungültige Eingabe des Benutzers
            ElseIf Not (getSplineResult.Status = PromptStatus.OK) Then
                editor.WriteMessage(ControlChars.CrLf & "Keinen gültigen Spline ausgewählt" & ControlChars.CrLf)
                ' Beenden der Methode
                Exit Sub
            ' Spline ausgewählt
            Else
                ' Anlegen eines Transaktionsobjektes um auf die Zeichnungsdatenbank zugreifen zu können
                Dim trans As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction

                Try
                    ' Öffnen der Datei (Neuanlegen falls noch nicht vorhanden)
                    Dim radiusesFileStream As FileStream = New FileStream("d:\test.csv", FileMode.OpenOrCreate, FileAccess.Write)

                    ' Stream öffnen und an das Ende der Datei springen
                    Dim radiusesStreamWriter As StreamWriter = New StreamWriter(radiusesFileStream)
                    radiusesStreamWriter.BaseStream.Seek(0, SeekOrigin.End)

                    ' Holen der Polylinie aus der Datenbank - Leserechte
                    Dim curve As Curve = trans.GetObject(getSplineResult.ObjectId, OpenMode.ForRead)
                    For i As Double = curve.StartParam To curve.EndParam Step 5
                        Dim firstDerivative As Vector3d = curve.GetFirstDerivative(curve.GetPointAtParameter(i))
                        Dim secondDerivative As Vector3d = curve.GetSecondDerivative(curve.GetPointAtParameter(i))
                        Dim kreuzprodukt As Vector3d = firstDerivative.CrossProduct(secondDerivative)
                        Dim kruemmung As Double = Math.Abs(kreuzprodukt.Length) / Math.Pow(Math.Abs(firstDerivative.Length), 3)

                        ' Schreiben des Eintrages in die Logdatei
                        radiusesStreamWriter.WriteLine(i & "m;" & 1 / kruemmung & "m")

                    Next

                    ' Schließen des Streams und der Datei
                    radiusesStreamWriter.Close()
                    radiusesFileStream.Close()

                ' Abfangen eines evtl. auftretenden Fehlers
                Catch ex As System.Exception
                    ' Beenden der Methode
                    Exit Sub

                ' Schließen der Transaktion mit der Datenbank
                Finally
                    trans.Dispose()
                End Try
            End If
        End Sub


Ein Spline durch drei Punkte (2574361.17,5834744.04,15.05), (2574361.61,5834728.29,12.55), (2574361.29,5834712.36,10.95) bekomm ich immer folgende Werte die auch wohl falsch sind:
0m;214.701891772998m
5m;3577.98627887494m
10m;244.114536859704m
15m;117.755645564372m
20m;172.827502291385m
25m;703.642338725218m
30m;340.949408462261m

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 22. Feb. 2010 13:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ach ja, wenn ich einen Kreis durch diese drei Punkte lege beträgt der Radius ungefähr 215m

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 22. Feb. 2010 14:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das Problem liegt wohl nicht an dem Programm sondern am Erstellen des Splines.

Ich habe als Starttangente und Endtangente des Splines Punkte auf dem Kreis gewählt die dicht an P1 und P3 liegen und siehe da ich erhalte Werte zwischen 211 und 215 perfekt

Wie mache ich das ganze aber jetzt mit 4 Punkten, da kann ich ja keinen Kreis mehr zeichnen? Kann man Splines nicht ohne Start und Endtangente konstruieren?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian Blei
Mitglied



Sehen Sie sich das Profil von Christian Blei an!   Senden Sie eine Private Message an Christian Blei  Schreiben Sie einen Gästebucheintrag für Christian Blei

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 23. Feb. 2010 09:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gloem 10 Unities + Antwort hilfreich

Hi,

als Typ: Bei Kurvenfunktionen wenn möglich immer über den Parameter gehen. Also direkt: tCurveGetSecondDerivative(Param). Die Eingabe über den Punkt auf der Kurve ist nicht besonders stabil.

Warum                   
>  Dim kruemmung As Double = Math.Abs(kreuzprodukt.Length) / Math.Pow(Math.Abs(firstDerivative.Length), 3)<  ??


Ich hätte gedacht K(param)= tcurve.secondDerivative(param)
und Krümmungsradius dann R(param)=1/ K(param). (Gerade-Krümmung =0, Radius=unendlich)
Aber der Krümmunggradius in einem Punkt einer Kurve hat ja auch mit einem Kreis durch drei Punkte dieser Kurve eigentlich nichts zu tun, ausser man lässt die drei Punkte konvergieren.......

Spline ohne Start und Endtangente erstellen geht meines Wissens nicht. Auch das Abfragen von Steigung und Krümmung in den Start- Endpunkten ergibt eventuell kein Ergebnis, da es sich nur um "Werte von einer Seite" handelt, da die Steigung nur die Steigung einer Halbtangente etc, ist.(Da könnte ein Knick etc. sein) Die Wahl eines Ersatzpunktes minimal neben den Start- Endpunkten ist da schon der Weg. 

Gruss
Cristian Blei


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Gloem
Mitglied
Geoinformatiker


Sehen Sie sich das Profil von Gloem an!   Senden Sie eine Private Message an Gloem  Schreiben Sie einen Gästebucheintrag für Gloem

Beiträge: 179
Registriert: 07.12.2007

Windows 10 - 64 Bit, mindestens 16 GB RAM
<P>AutoCAD Map 2020, VBA, Dot-Net

erstellt am: 24. Feb. 2010 12:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Warum                 
>  Dim kruemmung As Double = Math.Abs(kreuzprodukt.Length) / Math.Pow(Math.Abs(firstDerivative.Length), 3)<  ??

Das kommt aus der Formel für "Berechnung der Krümmung für Raumkurven" aus dem Wikipedia-Artikel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian Blei
Mitglied



Sehen Sie sich das Profil von Christian Blei an!   Senden Sie eine Private Message an Christian Blei  Schreiben Sie einen Gästebucheintrag für Christian Blei

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 24. Feb. 2010 22:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gloem 10 Unities + Antwort hilfreich

Hi,

>Das kommt aus der Formel für "Berechnung der Krümmung für Raumkurven" aus dem Wikipedia-Artikel<

Da liege ich ja meilenweit daneben. Danke für den Hinweis auf den Artikel!

Gruss
Christian Blei

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz