Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tangenten an Diagramm per vba erstellen

Forumthread: Tangenten an Diagramm per vba erstellen

Tangenten an Diagramm per vba erstellen
25.11.2013 16:22:29
Daniel
Hi,
ich bin relativ neu im Programmieren allgemein und auch mit Excel und VBA. Ich glaube ich habe auch direkt eine ziemlich schwierige Aufgabe.
Nachdem ich jetzt schon tagelang das Internet und alle möglichen Foren durchsucht habe, hoffe ich, dass mir hier jemand weiterhelfen kann.
Ich lasse mir per VBA Daten von einem Versuch einlesen. Aus diesen Daten lasse ich mir dann ein Diagramm erstellen. Dabei stehen in Spalte A die y-Werte und in Spalte B die x-Werte.
Das Diagramm hat im ersten Abschnitt einen annähernd linearen Verlauf und flacht dann im zweiten Abschnitt ab.
Mein Problem ist nun folgendes:
Ich soll zwei Tangenten an das Diagramm zeichnen.
Die 1. Tangente soll durch 0,1 mal den Maximalwert und 0,4 mal den Maximalwert gehen.
Die 2. Tangente soll dann 1/6 der Steigung der 1. Tangente haben und am abflachenden Teil der Kurve liegen.
Hat jemand eine Ahnung wie das funktioniert? Oder ob das überhaupt funktioniert?
Ich habe mal die Daten von einem Versuch hochgeladen.
https://www.herber.de/bbs/user/88250.xlsx
Schonmal vielen Dank im Voraus.
Gruß Daniel

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tangenten an Diagramm per vba erstellen
25.11.2013 19:58:36
Beverly
Hi Daniel,
Zitat: Aus diesen Daten lasse ich mir dann ein Diagramm erstellen.
Und wo ist das Diagramm?
Frage: eine Tangente berüht meines Wissens eine Kurve nur an einem einzigen Punkt - wie soll sie dann durch 0,1 mal Maximalwert und 0,4 mal Maximalwert gehen?


Anzeige
AW: Tangenten an Diagramm per vba erstellen
26.11.2013 09:18:27
Bastian
Hallo Daniel,
erstmal ohne VBA, um die Aufgabenstellung zu präzisieren.
Entspricht das Ergebnis Deinen Vorstellungen?
Möchtest Du das jetzt mit VBA automatisieren?
https://www.herber.de/bbs/user/88258.xlsm
Gruß, Bastian

Anzeige
AW: Tangenten an Diagramm per vba erstellen
26.11.2013 12:21:52
Daniel
Hi,
danke für die schnellen Antworten.
@Karin: Stimmt, natürlich ist das dann keine Tangente. Mein Fehler. Und das Diagramm hab ich einfach vergessen.
@Bastian: Ja genau, so sollte das Ganze dann aussehen. Da ich das häufiger hintereinander machen muss wäre es gut wenn man das per VBA automatisieren könnte.
Gruß Daniel

Anzeige
AW: Tangenten an Diagramm per vba erstellen
27.11.2013 09:04:17
Daniel
Achso und zur Lage der Tangente mit 1/6 Steigung der Geraden: Sie sollte am Punkt mit dem wenigsten Abstand liegen.
Also wenn man jetzt die Tangente über der Kurve zeichnen lässt, sollte sie einfach parallel verschoben werden in den Punkt der Kurve der den geringsten Abstand zur Tangente hat.
Ich hoffe ich habe mich verständlich ausgedrückt.
Gruß Daniel

Anzeige
AW: Tangenten an Diagramm per vba erstellen
27.11.2013 13:35:24
Bastian
Hallo Daniel,
anbei eine Lösung ohne VBA:
https://www.herber.de/bbs/user/88279.xlsx
Zur Erklärung:
Dier erste "Tangente" ermittelt sich aus den beiden Punkten, durch die sie laufen soll (0,1 * max. Biegemoment und 0,4 * max Biegemoment)
Die Werte für den Biegewinkel werden linear interpoliert. Dazu habe ich rechts ein paar Hilfszellen gemacht.
Die Geradengleichung für die 2. Tangente setzt sich auch wieder aus Steigung und Achsenabschnitt zusammen. Die Steigung ist leicht ermittelt, da von Dir vorgegeben: 1/6 * Steigung der ersten Tangente.
Jetzt muss die Tangente so lange parallel verschoben werden, bis sie tangential an der Kurve des Biegemomentenverlaufes anliegt:
Um diesen Punkt zu ermitteln, habe ich die Kurve des Biegemomentenverlaufs entsprechend der Steigung der Tangente gedreht (über eine Drehmatrix). Die Koordinaten dazu findest Du in den Spalten "Biegemoment gedreht" und "Biegewinkel gedreht". Die gedrehte Kurve ist auch im Diagramm dargestellt (kannst Du ja löschen). Der Maximalwert der gedrehten Kurve ist der Berührungspunkt der Tangente.
Ich hoffe, ich hab mich verständlich ausgedrückt, und Du kannst die Vorgehensweise nachvollziehen.
Gruß, Bastian

Anzeige
AW: Tangenten an Diagramm per vba erstellen
27.11.2013 16:31:27
Daniel
Hi Bastian,
vielen Dank für die Hilfe. Ich glaube schon, dass ich das Ganze verstanden habe.
Ich hoffe nur, dass ich das Alles jetzt in VBA geschrieben bekomme.
Gruß Daniel

AW: Tangenten an Diagramm per vba erstellen
27.11.2013 16:40:56
Bastian
Hallo Daniel,
warum brauchst Du das unbedingt in VBA? Wenn Du über Dein vorhandenes VBA-Skript jetzt in die Spalten A und B neue Daten einliest, werden die Daten für die Tangenten automatisch angepasst.
Kann sein, dass Du die Daten in den anderen Spalten weiter nach unten kopieren musst.
Wenn aber immer die gleiche Anzahl an Daten eingelesen wird (124 Werte bis Biegewinkel 61,5°), musst Du selbst das nicht machen.
Gruß, Bastian

Anzeige
AW: Tangenten an Diagramm per vba erstellen
27.11.2013 19:59:56
Daniel
Hi Bastian,
ich lasse mir per VBA Daten einlesen und zwar variiert deren Anzahl. Es könnten bis zu 20 sein. diese werden dann zuerst bearbeitet dass sie so aussehen wie das Beispiel, welches ich hochgeladen habe.
Es sind dann in jedem Tabellenblatt 124 Werte. Nur die Anzahl der Tabellenblätter variiert.
Diese Daten werden dann noch in einem anderem Tabellenblatt ausgewertet. Es ist also mit den zwei Geraden noch nicht fertig.
Ich möchte eigentlich die gesamte Auswertung automatisieren. Deswegen wäre es gut alles in VBA zu haben.
Gruß Daniel

Anzeige
AW: Tangenten an Diagramm per vba erstellen
28.11.2013 17:58:37
Bastian
Hallo Daniel,
der nachfolgende Code berechnet Dir die Geradengleichungen der beiden Tangenten. Ich habe die Ergebnisse am Ende über eine MsgBox ausgegeben. Du kannst damit natürlich auch weiterrechnen, oder sie nutzen, um die Tangenten im Diagramm darzustellen.
Gruß, Bastian

Option Explicit
Sub TangentenGleichungen()
Dim rngBiegemoment As Range               'Zellbereich Biegemoment
Dim rngBiegewinkel As Range               'Zellbereich Biegewinkel
Dim varBiege As Variant                   'Matrix Biegemomentenverlauf
Dim varDreh As Variant                    'Drehmatrix
Dim varBiegeGedr As Variant               'Gedrehte Matrix Biegemomentenverlauf
Dim varC As Variant                       'Gedrehte Matrix Biegemomentenverlauf wird mit  _
Vektor (1,0) multipliziert, _
um nur die y-Werte (Biegemoment) zu erhalten  _
und den Max-Wert ermitteln zu können
Dim dblMax As Double                      'max-Werte im Array varBiegeGedr
Dim intPos As Integer                     'Position des max-Wertes im Array varBiegeGedr
Dim dblWinkel As Double                   'Winkel aus Steigung der 2. Tangente
Dim y As Double, x As Double              'Berührungspunkt Tangente 2
Dim dblMaxBiegemoment As Double           'max. Biegemoment
Dim dblMaxBiegem10 As Double              'max. Biegemoment * 0,1
Dim dblMaxBiegem40 As Double              'max. Biegemoment * 0,4
Dim lngZeileL10 As Long                   'Untere Zeile 10% von max. Biegemoment
Dim lngZeileL40 As Long                   'Untere Zeile 40% von max. Biegemoment
Dim dblYL1 As Double, dblXL1 As Double    'Y- und X- Werte für die Interpolation des  _
Biegewinkels
Dim dblYU1 As Double, dblXU1 As Double
Dim dblYL4 As Double, dblXL4 As Double
Dim dblYU4 As Double, dblXU4 As Double
Dim dblMaxBiegew10 As Double              'Interpolierter Biegewinkel bei max. Biegemoment * _
0,1
Dim dblMaxBiegew40 As Double              'Interpolierter Biegewinkel bei max. Biegemoment * _
0,4
Dim dblSteigung1 As Double, dblAchsenab1 As Double  'Steigung und Achsenabschnitt Tangente  _
1
Dim dblSteigung2 As Double, dblAchsenab2 As Double  'Steigung und Achsenabschnitt Tangente  _
2
With ThisWorkbook.Worksheets("Tabelle1")
'Zellbereiche für Biegemoment und Biegewinkel zuweisen
Set rngBiegemoment = .Range(Cells(3, 1), Cells(3, 1).End(xlDown))
Set rngBiegewinkel = .Range(Cells(3, 2), Cells(3, 2).End(xlDown))
'Max Biegemoment
dblMaxBiegemoment = WorksheetFunction.max(rngBiegemoment.Value)
dblMaxBiegem10 = 0.1 * dblMaxBiegemoment
dblMaxBiegem40 = 0.4 * dblMaxBiegemoment
lngZeileL10 = WorksheetFunction.Match(dblMaxBiegem10, rngBiegemoment.Value, 1)
lngZeileL40 = WorksheetFunction.Match(dblMaxBiegem40, rngBiegemoment.Value, 1)
'Hilfswerte für die Interpolation des Biegewinkels
dblYL1 = .Cells(lngZeileL10 + 2, 1).Value
dblXL1 = .Cells(lngZeileL10 + 2, 2).Value
dblYU1 = .Cells(lngZeileL10 + 3, 1).Value
dblXU1 = .Cells(lngZeileL10 + 3, 2).Value
dblYL4 = .Cells(lngZeileL40 + 2, 1).Value
dblXL4 = .Cells(lngZeileL40 + 2, 2).Value
dblYU4 = .Cells(lngZeileL40 + 3, 1).Value
dblXU4 = .Cells(lngZeileL40 + 3, 2).Value
'Lineare Interpolation des Biegewinkels
dblMaxBiegew10 = (dblYU1 - dblYL1) / (dblXU1 - dblXL1) _
* (dblMaxBiegem10 - dblYL1) + dblXL1
dblMaxBiegew40 = (dblYU4 - dblYL4) / (dblXU4 - dblXL4) _
* (dblMaxBiegem40 - dblYL4) + dblXL4
'Steigung und Achsenabschnitt der Geradengleichungen der Tangenten
dblSteigung1 = (dblMaxBiegem40 - dblMaxBiegem10) / (dblMaxBiegew40 - dblMaxBiegew10)
dblAchsenab1 = dblMaxBiegem40 - dblSteigung1 * dblMaxBiegew40
dblSteigung2 = dblSteigung1 / 6
dblWinkel = Atn(dblSteigung2)
varBiege = .Range(Cells(3, 1), Cells(3, 2).End(xlDown))
varDreh = Array(Array(Cos(dblWinkel), Sin(dblWinkel)), Array(-Sin(dblWinkel), Cos( _
dblWinkel)))
varBiegeGedr = WorksheetFunction.MMult(varBiege, varDreh)
varC = Array(Array(1), Array(0))
varBiegeGedr = WorksheetFunction.MMult(varBiegeGedr, varC)
dblMax = WorksheetFunction.max(varBiegeGedr)
For intPos = LBound(varBiegeGedr) To UBound(varBiegeGedr)
If varBiegeGedr(intPos, 1) = dblMax Then Exit For
Next
y = varBiege(intPos, 1)
x = varBiege(intPos, 2)
dblAchsenab2 = y - (x * dblSteigung2)
End With
MsgBox "Steigung Tangente1: " & dblSteigung1 & Chr(13) & _
"Achsenabschnitt Tangente1: " & dblAchsenab1 & Chr(13) & Chr(13) & _
"Steigung Tangente2: " & dblSteigung2 & Chr(13) & _
"Achsenabschnitt Tangente2: " & dblAchsenab2
End Sub

Anzeige
AW: Tangenten an Diagramm per vba erstellen
28.11.2013 21:08:49
Daniel
Hallo Bastian,
tausend Dank für die Hilfe hast mir echt wahnsinnig weitergeholfen.
Gruß Daniel
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige