DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

tangent der Kurven

hallo zusammen,
ich benutze Labview 7.1,und Diadem 9.1
ich will in Diadem, die Tangenten meiner Kurven berechen,und plotten.
Gibt es in Diadem diese Eigenschaft,damit  man die tangenten plotten kann. oder ich nehme ein beliebiger Punkt (Anfang) auf der Kurve,dann mit zweitem Punkt(Ende) plotte ich die Tangent.
ich habe in der Hilfe von Diadem ein Beispiel gesehen:
"Erzeugen und sichten einer Kanale"
das Bereich zwishen den 2 Cursor wird in unterem Graph vergrössert.
diese Idee bringt mir, dass man auch zwischen den 2 Cursor Tangente machen..
 
Kann jemand mir helfen,wie ich weitergehen kann....?
 
mfG
Hakan
0 Kudos
Message 1 of 11
(6,246 Views)
Hallo hakan_s,

Die Tangente an einem Punkt einer Kurve ist als Gerade definiert, welche die gleiche Steigung hat wie die Kurve in diesem Punkt.
Eine Solche Kurve könnte in DIadem mit der Funktion "Kanal generieren" erzeugt werden (ANALYSIS, Basismathematik). Diese Funktion braucht als Parameter Startwert, Endwert, Werteanzahl. Um Start- und Endwert angeben zu können, benötigen Sie die  Geradengleichung der Tangente, z.B. in der Form y= mb +b
Die Steigung einer Kurve (m) kann man über deren Ableitung ermitteln. Im praktischen Fall einfacher ist es, zur Berechnung 2 Punkte zu benutzen. Die Steigung berechnet sich dann über delta y / delta x, also (y1-y2)/(x1-x2) der beiden Punkte.
Um die Punktkoordinaten herauszufinden können Sie, wie Sie richtig vermuten, die Cursor im VIEW verwenden. Blättern Sie in der DIAdem Hilfe einmal durch das Kapitel DIAdem VIEW: Objekte, Methoden, Eigenschaften um die richtige Syntax zum auslesen der Cursor zu erfahren.
Wenn Sie zur steigung noch den Ordinatenachsenschnittpunkt b errechnen möchten, setzen Sie das errechnete m einfach in die Formel y1-mx1 = b ein.
Berechnungen dieser Art können Sie interaktiv mit dem Taschenrechner oder in einem kurzen VBS durchführen.
Bei der Erstellung des Kanals können Sie sich dann noch entscheiden, ob Sie eine Tangente im gesamten Wertebereich des Zeitkanals erzeugen möchten, oder der Übersichtlichkeit halber nur einen kurzen Ausschnitt

Ich hoffe, diese Ausführungen helfen Ihnen weiter.

Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
0 Kudos
Message 2 of 11
(6,232 Views)

Hallo Herr Schumacher,

Danke für ihre Antwort. was Sie erzählt haben,wollte ich automatisch machen.z.B

ich habe zwei 2-D Achse. oberen Achse habe ich meinen graph,und untern achse meinen Tangent-Achse. ich nehme 2 punkte mit cursors auf meinen Graph,und sehe ich in unteren Graph meine Tangente. Ich will nich jedes mal Taaschenrechner benutzen, ich will es automatisch machen lassen.

Sie haben geschrieben,das man mit VBS  machen, aber ich habe noch nicht das benutzt.Haben Sie eine Beispiel für mich?

mfG

Hakan

0 Kudos
Message 3 of 11
(6,224 Views)
Hallo Hakan,
Ich habe Ihnen ein Beispielskript erstellt welches, soweit ich es verstanden habe, so arbeitet, wie sie es brauchen.
Falls nicht: Die einzelnen Befehle sind in der DIAdem Hilfe gut beschrieben so dass Sie das Beispiel sicher an Iher Anforderungen anpassen können.


''Init
set cursor = view.activesheet.cursor
set curves = View.ActiveSheet.ActiveArea.DisplayObj.Curves
set curve = Curves(1)

' Band- und Kurvencursor einschalten
cursor.Type = "Band"
cursor.Mode = "GraphPoints"
call View.ActiveSheet.ActiveArea.DisplayObj.SetLeadingCurve(1)

' Cursorpositionen auslesen
anfang = cursor.p1
ende = cursor.p2
if ende=0 then ende = pno(curve.xchannelnumber,cursor.x2)

'Berechnungen
x1= chdx(anfang,curve.xchannelnumber)
x2= chdx(ende,curve.xchannelnumber)
y1= chdx(anfang,curve.ychannelnumber)
y2= chdx(ende,curve.ychannelnumber)

m=(x1-x2)/(y1-y2)
b= y1-m*x1
equ= "y = "&m&" * x + "&b

'Kanäle allokieren
tx=cno("free")
Call chnalloc(curve.xchannelname&" Tangente 1",anzahl)
ty=cno("free")
Call chnalloc(curve.ychannelname&" Tangente 1",anzahl)
Call ChnPropSet(ty, "description", equ)
Call ChnPropCreate(ty, "m", DataTypeFloat64)
Call ChnPropSet(ty, "m", m)
Call ChnPropCreate(ty, "b", DataTypeFloat64)
Call ChnPropSet(ty, "b", b)

'Punkte in neuen Kanälen einfügen
chd(1,tx)=x1
chd(2,tx)=x2
chd(1,ty)=y1
chd(2,ty)=y2

'Neue Kurve im VIEW eintragen
Call Curves.Add(tx,ty)
Curves(Curves.count).Color="red"
call View.ActiveSheet.ActiveArea.DisplayObj.SetLeadingCurve(1)
CAll View.refresh

Message Edited by IngoS on 07-29-2005 09:32 AM

Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
Message 4 of 11
(6,213 Views)

Danke Hr.Schumacher,

das ist genau, was ich machen möchte...

Vielen Dank für ihre Hilfe

MfG

Hakan

0 Kudos
Message 5 of 11
(6,195 Views)

Hallo Entshuldigung Jetz mache ich ein program wo ich brauche automatish eint tangent zu tun, aber ich verstehe nicht so gut diese beispiel. Ich bien mexikaner und ich bin in Deutschland und mache ein projekt aber mein Deutsch ist nicht so gut. Is dass moglich das Sie haben diese beispiel für Labview ?   PS. Wenn Sie Englisch kann es ist besser für mich. Vielen Dank Bis dann.

 

0 Kudos
Message 6 of 11
(5,830 Views)
Hello Ramiyro,
the example script above is meant to be used in DIAdem VIEW. It is using the curve coordinates marked by a bandcursor and calculates a line between these two points. Thus, the name of this thread is not 100% correct, since a tangent should touch a curve only at one point. But if you are moving the two cursors very close together you will get something similar.

The mathematics are actually pretty simple and its not a big deal to  translate the calculation to LabVIEW.
If the 2 points have the coordinates (x1,y1) and (x2,y2), and the curve equation is y = m*x+b, you can calculate m and b by:
    m=(x1-x2)/(y1-y2)
    b= y1-m*x1

Hope this can  help you to unserstand the procedure.
If you need to calculate a "real" tangent to a curve, use the curve slope at the point coordinates for m. You will get the slope by differentiation of the curve.

regards
Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
Message 7 of 11
(5,816 Views)
Ok Mr. Ingo Thank you very much! I will try do it like you told me. But now I have another question about the same thing but before I was trying to do it manually and I couldn´t because I didn´t find the way.
 
In the example that I attach my cursors 0 and 1 depend of the position that I give to the line. But I would like to know if is possible in the other way that my line depends of the position of the two points (cursor 0 and 1); because I tryed in this way and I don´t know why I couldn't  draw the line.
 
Regards
 
Ramiyro
0 Kudos
Message 8 of 11
(5,797 Views)
0 Kudos
Message 9 of 11
(5,794 Views)
You almost have got all the code you need; simply change the cursor properties to read and use them instead of the controls.

Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
Message 10 of 11
(5,790 Views)