Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Werte einlesen und weiter verabeiten
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 24.07.2006, 10:48    Titel: Werte einlesen und weiter verabeiten Antworten mit Zitat

Hallo ich habe hier mal eine Frage und zwar geht es darum das ich in Catia ein Macro programmiere das mir eine Fahrbahn berrechnet. Da ich relativ wenig Ahnung hiervon habe nun meine Frage wie kann ich das anstellen!?

Ich habe bereits das Programm schon soweit das ich einezelne Koordinaten auslesen kann und die Länge zwischen ihnen berrechnet es auch schon allerdings nur die Abstände. Nun würde ich gerne immer die letzen 2 Längenwerte wieder in einen Speicher legen und vergleichen damit ich fals diese gleich sind diese weiter nehemen kann und hieraus dann das Bogenmaß berrechen kann. Ich hoffe das ich das Problem recht gut schildern konnte.

Hier unten seht ihr auch mal mein bissheriges Programm.
Es liest die einzelen Punkte ein und gibt sie in einer Exel Tabelle wieder aus aber nur die x-;y- Koordinaten und den Abstand der beiden.

nun fehlt noch ein einlesen und vergleich der letzten 2 werte umd damit weiter zurechnen





Code:

  If   fFileExist() <> 0 then 
   Set Datei = CATIA.FileSystem.CreateFile (cDateiPfad, False)
    Else 
   Set Datei = CATIA.FileSystem.GetFile (cDateiPfad)
  End If
 
  Dim mySelection as Selection
  Set mySelection = Catia.ActiveDocument.Selection
 
  Dim AnzahlSelekt as integer
  AnzahlSelekt = mySelection.count   ' Gibt an wieviele Elemente selektiert wurden
 
  Dim DStrom as TextStream
  Set DStrom = Datei.OpenAsTextStream ("ForAppending")
 
   DStrom.Write (";" &Chr(10)& ";" & "Punkteausgabe mit editierten Macro " & Chr(10)& Chr(10))
   DStrom.Write ("START" & Chr(10))
   DStrom.Write ( "Element" & ";" & "X-Koordinate" & ";" & "Y-Koordinate" & ";" & "Z-Koordinate" & ";" & "Distanz" &Chr(10))
 
  Dim I as integer
  Dim oPunktKoord(2) as CATSafeVariant 
  Dim oSelElem as Object
     Dim x as integer
   Dim y as integer
     Dim xres as integer
   Dim yres as integer
   Dim dis as double
   yres = 0
   xres = 0

  For I = 1 to AnzahlSelekt
   
   Set oSelElem = mySelection.Item(I)
   oSelElem.Value.GetCoordinates (oPunktKoord)
   x = oPunktKoord(0)
   y = oPunktKoord(1)

   dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
   dis = Sqr(dis)

   yres = y
   xres = x

   text = oPunktKoord(0) &  ";" & oPunktKoord(1) &  ";" & oPunktKoord(2) & ";" & dis
        'text = replace(text, ","  , ".") 'falls Dezimalpunkte erforderlich sind

 
 DStrom.Write (mySelection.Item(I).Value.name &";" & oPunktKoord(0)& ";"& oPunktKoord(1)&";"& oPunktKoord(2) &";" & dis &";" &Chr(10))
' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
 
  Next
  DStrom.Write ("ENDE" & Chr(10)& Chr(10)& Chr(10))

  DStrom.Close
 
 
End Sub



Editiert durch Moderator: CODE-Tags hinzugefügt zwecks besserer Übersichtlichkeit und Chancenerhöhung einer Antwort. (A.K.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 24.07.2006, 11:44    Titel: Antworten mit Zitat

---> Verschoben ins Computer-Forum da es sich nicht um Qbasic/Freebasic handelt; auch wenn der Code stark daran erinnert.

MFG A.K.

Editiert durch Moderator: Danke für den Hinweis Michael. (A.K.)
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*


Zuletzt bearbeitet von A.K. am 24.07.2006, 16:32, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 24.07.2006, 16:17    Titel: Antworten mit Zitat

Kannst du in den Quellcode ein paar Kommentare packen?
Entweder liegt es am ungewohnten Basic Dialekt oder an den Temperaturen, aber ich kann den Quellcode kaum lesen.

@A.K.
Du darfst auch die Code Box um den Quellcode setzen zwinkern

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 25.07.2006, 10:20    Titel: Antworten mit Zitat

naja ich kann schon was dazu schreiben aber das wesentliche steht ja schon dabei!!

weis natürlich auch nicht welchen teil ich da komentieren soll da ich nicht soviel plan davon hab ist ein Macro !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.07.2006, 11:20    Titel: Re: Werte einlesen und weiter verabeiten Antworten mit Zitat

Ich Versuche es mal.

Objekt Orentiertes Basic? Okey.

Chr(10) ist wohl ein Zeilenumbruch.

Nun zur deine Frage.
Ich muss erstmal nachsehen, was Bogenmass genau ist
http://de.wikipedia.org/wiki/Bogenmass

Es geht also um den Winkel in Bogenmass?

tan(phi) = GK/AK = Y / X

Zitat:
Ich habe bereits das Programm schon soweit das ich einezelne Koordinaten auslesen kann und die Länge zwischen ihnen berrechnet es auch schon allerdings nur die Abstände.

Was gehört bei dir noch zu Länge ausser dem Abstand?
Anders gefragt: Wo ist der Unterschied zwischen Länge und Abstand?
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 25.07.2006, 15:51    Titel: Antworten mit Zitat

also Länge ist gleich Abstand von einem Punkt zum anderen ist eine einfache Vektorberrechnung
nun will ich immer die letzten 2 Maße miteinander vergleichen und fals diese gleich sind darauf schließen das es sich um einen Kreisbogen handelt und diesen dann berrechnen.
mein Prob ist ich weis nicht wie ich das mache das ich die letzten 2 Werte in einen Variable schreibe und vergleiche und damit dann weiter rechne!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.07.2006, 16:49    Titel: Antworten mit Zitat

Jetzt verstehe ich's ungefähr.
Code:
  If   fFileExist() <> 0 then
   Set Datei = CATIA.FileSystem.CreateFile (cDateiPfad, False)
    Else
   Set Datei = CATIA.FileSystem.GetFile (cDateiPfad)
  End If
 
  Dim mySelection as Selection
  Set mySelection = Catia.ActiveDocument.Selection
 
  Dim AnzahlSelekt as integer
  AnzahlSelekt = mySelection.count   ' Gibt an wieviele Elemente selektiert wurden
 
  Dim DStrom as TextStream
  Set DStrom = Datei.OpenAsTextStream ("ForAppending")
 
   DStrom.Write (";" &Chr(10)& ";" & "Punkteausgabe mit editierten Macro " & Chr(10)& Chr(10))
   DStrom.Write ("START" & Chr(10))
   DStrom.Write ( "Element" & ";" & "X-Koordinate" & ";" & "Y-Koordinate" & ";" & "Z-Koordinate" & ";" & "Distanz" &Chr(10))
 
  Dim I as integer
  Dim oPunktKoord(2) as CATSafeVariant
  Dim oSelElem as Object
     Dim x as integer
   Dim y as integer
     Dim xres as integer
   Dim yres as integer
   Dim dis as double
   dim disAlt as double
   dim bogen as double
   yres = 0
   xres = 0

  For I = 1 to AnzahlSelekt
   
   Set oSelElem = mySelection.Item(I)
   oSelElem.Value.GetCoordinates (oPunktKoord)
   x = oPunktKoord(0)
   y = oPunktKoord(1)

   disAlt=dis

   dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
   dis = Sqr(dis)

   if dis=disalt then
      bogen=ATN((x-xres)/(y-yres))
   end if

   yres = y
   xres = x

   text = oPunktKoord(0) &  ";" & oPunktKoord(1) &  ";" & oPunktKoord(2) & ";" & dis
        'text = replace(text, ","  , ".") 'falls Dezimalpunkte erforderlich sind

 
 DStrom.Write (mySelection.Item(I).Value.name &";" & oPunktKoord(0)& ";"& oPunktKoord(1)&";"& oPunktKoord(2) &";" & dis &";" &Chr(10))
' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
 
  Next
  DStrom.Write ("ENDE" & Chr(10)& Chr(10)& Chr(10))

  DStrom.Close
 
 
End Sub

Wenn du mit Bogenmass, eben den Winkel meinst, sollte die Berechnung passen oder zumindest ein anfang sein.
Wie die Ausgabe sein soll, weiss ich aber nicht.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 31.07.2006, 12:07    Titel: Antworten mit Zitat

Hallo also die Ausgabe ist dann in einer Exel Tabelle wo die Daten stehen das ist nicht das Problem das geht alles soweit nur hab ich jetzt das Problem wenn ich 2 aufeinander folgende Radien habe das es dann ein Fehler gibt da ich durch null teilen würde!??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 31.07.2006, 12:55    Titel: Antworten mit Zitat

Achso, du willst einfach keine Doppelungen?
Code:
  If   fFileExist() <> 0 then
   Set Datei = CATIA.FileSystem.CreateFile (cDateiPfad, False)
    Else
   Set Datei = CATIA.FileSystem.GetFile (cDateiPfad)
  End If
 
  Dim mySelection as Selection
  Set mySelection = Catia.ActiveDocument.Selection
 
  Dim AnzahlSelekt as integer
  AnzahlSelekt = mySelection.count   ' Gibt an wieviele Elemente selektiert wurden
 
  Dim DStrom as TextStream
  Set DStrom = Datei.OpenAsTextStream ("ForAppending")
 
   DStrom.Write (";" &Chr(10)& ";" & "Punkteausgabe mit editierten Macro " & Chr(10)& Chr(10))
   DStrom.Write ("START" & Chr(10))
   DStrom.Write ( "Element" & ";" & "X-Koordinate" & ";" & "Y-Koordinate" & ";" & "Z-Koordinate" & ";" & "Distanz" &Chr(10))
 
  Dim I as integer
  Dim oPunktKoord(2) as CATSafeVariant
  Dim oSelElem as Object
     Dim x as integer
   Dim y as integer
     Dim xres as integer
   Dim yres as integer
   Dim dis as double
   yres = 0
   xres = 0

  For I = 1 to AnzahlSelekt
   
   Set oSelElem = mySelection.Item(I)
   oSelElem.Value.GetCoordinates (oPunktKoord)
   x = oPunktKoord(0)
   y = oPunktKoord(1)

   dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
   dis = Sqr(dis)

   if xres<>x or yres<>yres then
     yres = y
     xres = x

     text = oPunktKoord(0) &  ";" & oPunktKoord(1) &  ";" & oPunktKoord(2) & ";" & dis
        'text = replace(text, ","  , ".") 'falls Dezimalpunkte erforderlich sind

 
    DStrom.Write (mySelection.Item(I).Value.name &";" & oPunktKoord(0)& ";"& oPunktKoord(1)&";"& oPunktKoord(2) &";" & dis &";" &Chr(10))
   ' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
  end if
  Next
  DStrom.Write ("ENDE" & Chr(10)& Chr(10)& Chr(10))

  DStrom.Close
 
 
End Sub

So etwa?
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 31.07.2006, 16:24    Titel: Antworten mit Zitat

ja so etwa nicht unbedingt eine dopplung zeil soll sein das ich eine beliebige Bahnkurve kann auch auch 3,4 oder mehr aufeinander folgende Radien bestehen. aber ich werde das mal so probieren wo ist denn nun die genau Änderung zum vorherigen Prog!??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 31.07.2006, 17:04    Titel: Antworten mit Zitat

Zu deinem Ursprungsprogramm:
Zitat:

dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
dis = Sqr(dis)

if xres<>x or yres<>yres then
yres = y
xres = x

text = oPunktKoord(0) & ";" & oPunktKoord(1) & ";" & oPunktKoord(2) & ";" & dis
'text = replace(text, "," , ".") 'falls Dezimalpunkte erforderlich sind


DStrom.Write (mySelection.Item(I).Value.name &";" & oPunktKoord(0)& ";"& oPunktKoord(1)&";"& oPunktKoord(2) &";" & dis &";" &Chr(10))
' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
end if
Next

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 02.08.2006, 22:33    Titel: Antworten mit Zitat

THX

werd nun mal schauen was rauskommt und dann wieder fragen ist echt duper das forum hier mus man schon sagen!
zwinkern zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 29.09.2006, 18:35    Titel: Antworten mit Zitat

hallo

hab mal wieder eine Frage zu meinem Problem


Code:


Function fFileExist() as Integer
   On Error Resume Next
   CATIA.FileSystem.GetFile (cDateiPfad)
   fFileExist = Err.Number
End Function
 
Sub CATMain()

If   fFileExist() <> 0 then
   Set Datei = CATIA.FileSystem.CreateFile (cDateiPfad, False)
    Else
   Set Datei = CATIA.FileSystem.GetFile (cDateiPfad)
  End If
 
  Dim mySelection as Selection
  Set mySelection = Catia.ActiveDocument.Selection
 
  Dim AnzahlSelekt as integer
  AnzahlSelekt = mySelection.count   ' Gibt an wieviele Elemente selektiert wurden
 
  Dim DStrom as TextStream
  Set DStrom = Datei.OpenAsTextStream ("ForAppending")
 
   DStrom.Write (";" &Chr(10)& ";" & "Punkteausgabe mit editierten Macro " & Chr(10)& Chr(10))
   DStrom.Write ("START" & Chr(10))
   DStrom.Write ( "Element" & ";" & "X-Koordinate" & ";" & "Y-Koordinate" & ";" & "Z-Koordinate" & ";" & "Distanz" & ";" & " Bogenmaß " &Chr(10))
 
  Dim I as integer                                    ' Deklaration der Variablen
  Dim oPunktKoord(2) as CATSafeVariant
  Dim oSelElem as Object
    Dim x as integer
    Dim y as integer
    Dim xres as integer
    Dim yres as integer
    Dim dis as double
    dim disAlt as double
    dim bogen as double
   Dim xAlt as double
   Dim yAlt as double

   'Variablen für Vorberechnung

   Dim j as integer
   Dim counter as integer
   dim bm as integer
   Dim x1 as double
   Dim x2 as double
   Dim y1 as double
   Dim y2 as double

   yres = 0
   xres = 0


  For I = 1 to AnzahlSelekt
'Rechnet 3 Schritte vorraus zum schauen ob ein Bogenmass kommt.

   if bm <> 1 then
      For j = 1 to 4
            
            Set oSelElem = mySelection.Item(j)
              oSelElem.Value.GetCoordinates (oPunktKoord)
               x = oPunktKoord(0)
              y = oPunktKoord(1)

            disAlt = dis   
            
                dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
                dis = Sqr(dis)
                  yres = y
                  xres = x

         if dis = disAlt then
            bm = 1
         end if
      Next   
   end if   
 
   Set oSelElem = mySelection.Item(I)
   oSelElem.Value.GetCoordinates (oPunktKoord)
   x = oPunktKoord(0)
   y = oPunktKoord(1)

   disAlt = dis

   dis = ((x - xres) * (x - xres)) + ((y -yres) * (y -yres))
   dis = Sqr(dis)

   if bm = 1 then
      if count >= 1 then
         x2 = x
         y2 = y
         count = count + 1
      end if

      if count < 1 then
         x1 = x
         y1 = y
         count = count + 1
      end if
   end if
 
   if dis = disAlt then
      bogen = ((x1 + x2) * (x2 + x)) + ((y1 + y2) * (y2 + y))
      bogen = bogen / (Sqr( (((x1 + x2) * (y1 + y2)))^2 ) ) * ( Sqr((((x2 + x) * (y2 + y)))^2 ))
      bogen =  bogen / Sqr(bogen * bogen + 1)
      count = 0
      bm = 0
   end if

   yres = y
   xres = x

   text = oPunktKoord(0) &  ";" & oPunktKoord(1) &  ";" & oPunktKoord(2) & ";" & dis & ";" & bogen
        'text = replace(text, ","  , ".") 'falls Dezimalpunkte erforderlich sind

 
 DStrom.Write (mySelection.Item(I).Value.name &";" & oPunktKoord(0)& ";"& oPunktKoord(1)&";"& oPunktKoord(2) &";" & dis &";" & bogen &";"& Chr(10))
' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
   
   bogen = 0
   
  Next
  DStrom.Write ("ENDE" & Chr(10)& Chr(10)& Chr(10))

  DStrom.Close
 
 
End Sub




also soweit geht es nun nur kann ich den ARCOS nicht berechnen da ich nicht weiß wie das geht da es diese Funktion ja nicht in Qbasic gibt oder doch!?

des weiteren bin ich mir auch nicht sicher ob das mit dem speichern der Werte so stimmt! Wäre super wenn einer mal drüber schauen könnte und mir vielleicht helfen .

Die Ausgabe stimmt soweit alles geht nur noch um die 2 Punkte
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.09.2006, 21:58    Titel: Antworten mit Zitat

Hi,
Bartsch, Mathematische Formeln hat Folgendes geschrieben:
Berechnung einer Arcusfunktion durch eine andere
(gültig für die Hauptwerte)
arcsin x = Pi/2 - arccos x = arctan((x / (Sqrt(1 - x²)))
arccos x = Pi/2 - arcsin x = arccot((x / (Sqrt(1 - x²)))
arctan x = Pi/2 - arccot x = arcsin((x / (Sqrt(1 + x²)))
arcsin x = Pi/2 - arccos x=arctan((x / (Sqrt(1 + x²)))
___________________________________________________________

Code:

arccot x = arctan (1 / x)       für x > 0  \
                                           = (allgemeingültig)
         = arctan (1 / x) + Pi  für x < 0  / 

Daß x hierbei im Bogenmaß(Radiant) sein muß, erwähne ich nur am Rande..
Die Funktion arctan() ist aber (meistens) eingebaut(warum wohl grinsen),
sodaß der Berechnung von arccos nix mehr im Wege steht..
Ich habe hier weitgehend die mathematische Schreibweise benutzt,
sie sollte für einen Programmierer jedoch lesbar und verständlich sein happy
[Edit]
Damit du nicht alles selbst schreiben mußt, habe ich mal in meinen Pascal-Sourcen gewühlt..
Code:
'Ä=Ž , Ö=™ , Ü=š ; ä=„ , ö=”, ü=? , ß=á ,§=õ , ©=¸
?"ArcusFunktionen.Bas ¸2006 by ytwinky, MD"

Function IIF(Bedingung As Long) As Long
  Return Bedingung
End Funktion

Function ACot(x As Double) As Double
  If x=0.0 Then
    Return 0.0
  Else
    Return Atn(1.0/x)+IIF(x<0, 4*Atn(1), 0)
End Function

Function ArcTan(x As Double) As Double
   Return Atn(x)+IIF(x<0, 4*Atn(1), 0)
End Function

Function ACos(x As Double) As Double
  If Abs(x)>1.0 Then
    ?"Fehler in ACOS, Argument>1.0"
    ?"x="; x
    Sleep
    End
  End If
  If Abs(x)=1.0 Then Return IIF(x<0, 4*Atn(1), 0)/2.0
  If Abs(x)<1.0 Then Return ACot(x/Sqrt(1.0-x*x))
  If Abs(x)=0.0 Then Return 2*Atn(1)
End Function

Function ASin(x As Double) As Double
  If Abs(x)>1.0 Then
    ?"Fehler in ASIN, Argument>1.0"
    ?"x="; x
    Sleep
    End
  End If
  If Abs(x)=1.0 Then Return 2*Atn(1)
  If Abs(x)<1.0 Then Return Atn(x/Sqrt(1.0-x*x))*Sgn(x)
End Function

Der Code ist nur portiert (läuft ja), etwaige Fehler sind zu Schulungszwecken eingebaut vor lachen auf dem Boden rollen
Ernsthaft:
Eine FreeBASIC-Version für Arcus-Funktionen wird es demnächst auf ytwinky.freebasic.de geben..
..ich leide gerade an den Schulungszwecken(und an einem derben Schnupfen grinsen)
So, geschafft: Arcus-Functions.Bas
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 13.11.2006, 18:38    Titel: Antworten mit Zitat

So ich hab nun mal etwas weiter mich versucht doch hab ich nun ein Problem ein Debugger bietet mir ja Catia nicht an oder gibt es diese funktion.
Leider habe ich es auch nicht geschaft einen einfachen Wert als Alert auszugeben womit ich mir meine berechnetten Werte ausgeben kann.
Weis zufällig jemand eine Funktion die mir einen String oder eine Variable auf den Bildschirm sendet?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 27.12.2006, 17:11    Titel: Antworten mit Zitat

hallo

hab da noch mal ein Problem vielleicht kann mir jemand hierbei helfen!!
hab die rechung durchgerechnet und das stimmt alles soweit aber das programm verhaut mir immer die werte für das Bogenmaß!

leigt vielleicht daran das ich über den bereich der Variable raus komme,
wenn ich allerdings in die Zeile wo ich das Bogenmaß berechne bei jemde Maß eine /1000 hinzufüge damit der Wert kleiner wird. Bringt er mir immer einen Fehler mit SQR in Zeile wo ich /1000 gemacht habe
vielleicht kann mir einer sage was hier der fehler ist währe super nett

unten das Programm!
hab die gennante Zeile extra mit Freiräumen hervorgehoben (Absätze)

Code:
Sub CATMain()

If fFileExist() <> 0 Then
   Set Datei = Catia.FileSystem.CreateFile(cDateiPfad, False)
    Else
   Set Datei = Catia.FileSystem.GetFile(cDateiPfad)
  End If
 
  Dim mySelection As Selection
  Set mySelection = Catia.ActiveDocument.Selection
 
  Dim AnzahlSelekt As Integer
  AnzahlSelekt = mySelection.count   ' Gibt an wieviele Elemente selektiert wurden
 
  Dim DStrom As TextStream
  Set DStrom = Datei.OpenAsTextStream("ForAppending")
 
   DStrom.Write (";" & Chr(10) & ";" & "Punkteausgabe mit editierten Macro " & Chr(10) & Chr(10))
   DStrom.Write ("START" & Chr(10))
   DStrom.Write ("Element" & ";" & "X-Koordinate" & ";" & "Y-Koordinate" & ";" & "Distanz" & ";" & " Bogenmaß " & Chr(10))
 
  Dim I As Integer                                                                                              ' Deklaration der Variablen
  Dim oPunktKoord(2) As CATSafeVariant
  Dim oSelElem As Object
    Dim x As Integer
    Dim y As Integer

    Dim xres As Integer
    Dim yres As Integer

    Dim dis As Double
    Dim disAlt As Double

    Dim bogen As Double

        Dim xAlt As Double
        Dim yAlt As Double

        'Variablen für Vorberechnung

        Dim j As Integer
        Dim counter As Integer
        Dim bm As Integer
        Dim x1 As Double
        Dim x2 As Double
        Dim y1 As Double
        Dim y2 As Double
        Dim pi As Double

        pi = 3.14159265358979
   yres = 0
   xres = 0
        bm = 0

  For I = 1 To AnzahlSelekt
'Rechnet 3 Schritte vorraus zum schauen ob ein Bogenmass kommt.

        If bm < 1 Then
                For j = 1 To 4
                           
                                Set oSelElem = mySelection.Item(j)
                                oSelElem.Value.GetCoordinates (oPunktKoord)
                                x = oPunktKoord(0)
                                y = oPunktKoord(1)

                                disAlt = dis
                               
                                         dis = ((x - xres) * (x - xres)) + ((y - yres) * (y - yres))
                                         dis = SQR(dis)
                                           yres = y
                                           xres = x

                        If dis <> disAlt Then
                                bm = 1
                        End If
                Next
        End If
 
   Set oSelElem = mySelection.Item(I)
   oSelElem.Value.GetCoordinates (oPunktKoord)
   x = oPunktKoord(0)
   y = oPunktKoord(1)

   disAlt = dis

   dis = ((x - xres) * (x - xres)) + ((y - yres) * (y - yres))
   dis = SQR(dis)

        If bm <> 1 Then
                If count >= 1 Then
                        x2 = x
                        y2 = y
                        count = count + 1
                End If

                If count < 1 Then
                        x1 = x
                        y1 = y
                        count = count + 1
                End If
        End If
 
        If dis <> disAlt Then
                bogen = 0
                bogen = SQR((x - x1) * (x - x1) + (y - y1) * (y - y1))

       



         bogen = 2 * ATN(bogen / (2 * SQR((dis / 1000) * (dis / 1000) - (bogen / 2) * (bogen / 2))))






                bogen = (pi / 360) * bogen
                bogen = (dis * bogen) * 1000
               
                count = 0
                bm = 0
        End If

   yres = y
   xres = x

   text = oPunktKoord(0) & ";" & oPunktKoord(1) & ";" & dis & ";" & bogen
        'text = replace(text, ","  , ".") 'falls Dezimalpunkte erforderlich sind

 
 DStrom.Write (mySelection.Item(I).Value.name & ";" & oPunktKoord(0) & ";" & oPunktKoord(1) & ";" & dis & ";" & bogen & ";" & Chr(10))
' Die Wertetabelle kann in Excel importiert werden. Wichtig dabei ist eine Dezimaltrennung mit Kommata!!!
   
   
  Next
  DStrom.Write ("ENDE" & Chr(10) & Chr(10) & Chr(10))

  DStrom.Close
 
 
End Sub


Editiert durch Moderator: Code-Tags hinzugefügt. (Sebastian)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 27.12.2006, 22:03    Titel: Antworten mit Zitat

Dieser Thread weckt auch in meinem Fall wieder einmal alte Erinnerungen... ;-) Die Zeit vor dem Informatikstudium noch auf dem ursprünglichen Beruf, nämlich Maschinenzeichner. Ich arbeitete damals mit dem CAD-System Bravo3 von Applicon (inzwischen von Unigraphics übernommen), damals noch auf DEC-VAX-Stationen unter VMS. Dies war schon vor 15 Jahren ein sehr ausgereiftes System, was Clientuserrechte (arbeiten als einfacher Benutzer ohne Adminrechte), Multiuserfähigkeiten anbelangt. Auf dem CAD-System selber hatte ich damals auch diverse Makros selber programmiert, die Programmiersprache hiess dort IAGL. Die dortige Sprache basierte seinerzeit noch auf PL/1. Damals natürlich noch nicht objektbasiert mit Properties, sondern haufenweise Funktionen wie ein BASIC-Interpreter mit umfangreichem Befehlssatz.

@Hyde-White:
Wenn ich Deine Beispiele richtig interpretiere, arbeitest Du demfall mit der Windows-Version und der Hersteller hat analog wie Microsoft bei ihrem Office und Internet Explorer auch zahlreiche ActiveX-Automatisierungsobjekte definiert, welche das Erstellen von Makros in Visual Basic Script (Endung .vbs) ermöglichen?

Zum Thema Typen: Eine gute Makrosprache sollte spezielle Datentypen auch für Längen und Winkel bereitstellen. Damals beim oben genannten IAGL musste man meines Wissens auch noch Typ "float" verwenden, aber man konnte immerhin mit getdistance() und getangle() (so hiess es glaube ich) den Benutzer eine Länge bzw. Winkel eingeben lassen, d.h. es erschien dann der komplette Prozessor, wo man z.B. bei der Länge anstelle einer Tastatureingabe die Länge auch als Abstand zweier Punkte definieren konnte. Diese Prozessoren eliminierten auf alle Fälle auch die Notwendigkeit, irgendwelche Einheitenumrechnungen selber machen zu müssen, weil die zurückgegebenen Werte jenen der Systemeinstellungen entsprochen haben.

Unter

http://de.wikipedia.org/wiki/Catia

scheint es noch einige gute Links zu haben, so dass Du hoffentlich auch für Catia eine Referenz mit allen Objektklassen, Methoden, Properties usw. ähnlich wie Microsoft dies in ihrem MSDN-Bereich auch veröffentlicht hat, finden kannst.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 28.12.2006, 19:43    Titel: Antworten mit Zitat

Vielen dank für die antwort.
naja leider bin ich kein Programmierer und will es auch nicht werden lächeln
bin Maschinenbauer und das soll wie oben geschrieben meine Studienarbeit werden. hab ja alles soweit fertig aber nur das mit dem rechnen in der einen Lage funktioniert nicht ob es solche befehle wie getangel usw gibt ??? keine Ahnung aber würde mir wohl auch nichts bringen da ich die Koordinaten aus einer Zeichnung auslese und dann diese auswerte und berechne damit abstände winkel Bogenmass usw.

nur verstehe ich nicht was das problem ist wenn ich /1000 rechne weil wenn ich es nicht mache rechnet er ja auch aber halt nicht richtig und wenn ich /1000 einfüge bringt er mir einen fehler!!

????? weinen weinen weinen weinen weinen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.12.2006, 19:14    Titel: Antworten mit Zitat

Hyde-White hat Folgendes geschrieben:
Code:
..
                bogen = (pi / 360) * bogen
 ..
..wenn du mit dieser Zeile den Winkel umrechnest, dann erkläre mir bitte wie???
(Zum Hin- und Herrechnen benutze ich den Faktor 180/Pi, der identisch ist mit 45/Atn(1) und der auch normalerweise funktioniert und auch gerne benutzt wird )
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hyde-White



Anmeldungsdatum: 24.07.2006
Beiträge: 13

BeitragVerfasst am: 01.01.2007, 20:41    Titel: Antworten mit Zitat

oh ja das ist mein Fehler! sollte 180/Pi heißen

aber trotzdem mekert er immer noch in der gleichen Zeile wo ich /1000 rechne!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz