ubuntuusers.de

Sinus in Shellscript verwenden

Status: Gelöst | Ubuntu-Version: Kubuntu 14.04 (Trusty Tahr)
Antworten |

Niualj

Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: Zähle...

Ich versuche gerade ein Programm mit Shellscripts zu Programmieren um mir automatisch bei Dreiecken die Winkel berechnen zu lassen.

Nun habe ich das Problem das ich keine möglichkeit finden kann, das mir das Terminal Sinus oder Kosinus u.s.w. berechnet.

Es reicht vollkommen aus wenn sie mir einfach nur eine möglichkeit sagen würden um von einer beliebigen zahl Sinus zu berechnen.

Vielen Dank!

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Hallo,

ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden. Als Beispiel kannst Du Dir eine Datei namens sinus.pl erstellen mit folgendem Inhalt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/perl -w
use strict;
use warnings;

my $winkel = 30;				# Winkel definieren
my $radiant = $winkel / 180 * 3.14159;		# Winkel in Radiant umrechenen
my $sinus_winkel = sin($radiant);		# Sinus ermitteln

# Ausgabe auf dem Bildschirm
print "\nDer Sinus von $winkel Grad ist $sinus_winkel.\n\n";

Starten kannst Du die Datei mit perl -w sinus.pl oder Du markierst diese Datei als ausführbar.

Grüße Ulf.

Niualj

(Themenstarter)
Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: Zähle...

Kann ich dieses script dann auch in en shellscript einbauen und dann über einen befehl wie $winkel= 40⁰ die Gradzahl ändern?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13217

Ulf24 schrieb:

ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden.

Ich nicht. Alles, bloß kein Perl. 😛 Dann lieber awk.

$ awk -v winkel=30 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}'
     0.500 

Ciao

robert

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Ja, das geht, wir müssen nur die Standardeingabe und -ausgabe nutzen. Gib mir 20 Minuten.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14382

Niualj schrieb:

... shellscript einbauen ...

Für Radiant kannst Du z. B. bc -l in einem shell-Script benutzen:

:~$ echo $sin=$(echo "scale=10; s(1.5)" | bc -l)
=.9974949866

EDIT:

Umrechnung Radiant in Grad: https://de.wikipedia.org/wiki/Radiant_(Einheit)

Niualj

(Themenstarter)
Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: 116

rklm schrieb:

Ulf24 schrieb:

ich kenne die mathematischen Funktion in der Bash nicht so genau. Ich würde dafür ein Perl-Skript verwenden.

Ich nicht. Alles, bloß kein Perl. 😛 Dann lieber awk.

Einverstanden!☺

$ awk -v winkel=30 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}'
     0.500 

Das hatt super geklappt! Jetzt kann ich das direkt verwenden. Zuerst hatt es zwar nicht funktioniert aber ich habe es dann in etwas geändert:

 winkel=90
echo $(awk -v winkel=$winkel 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}') 

Niualj

(Themenstarter)
Avatar von Niualj

Anmeldungsdatum:
31. Juli 2014

Beiträge: 116

lubux schrieb:

Für Radiant kannst Du z. B. bc -l in einem shell-Script benutzen:

:~$ echo $sin=$(echo "scale=10; s(1.5)" | bc -l)
=.9974949866

EDIT:

Umrechnung Radiant in Grad: https://de.wikipedia.org/wiki/Radiant_(Einheit)

Da war mir das von rklm doch lieber da ich das, wenns auch nicht schwer ist, trotzdem nicht mehr umrechnen muss.

Das ausrechnen von Cosinus und Tangens bekomme ich jetzt auch hin.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14382

Niualj schrieb:

..., trotzdem nicht mehr umrechnen muss.

Das musst Du mit bc -l auch nicht. Z. B.:

:~$ winkel=30; echo $sin=$(echo "scale=10; s(($winkel * 3.14)/180)" | bc -l)
=.4997701026

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Schün, wenn das Problem gelöst ist. Trotzdem meine Lösung zur Info. Das Perl-Skript:

1
2
3
4
5
6
7
8
!/usr/bin/perl -w
use strict;
use warnings;
my $winkel = $ARGV[0];						# Winkel definieren
my $radiant = $winkel / 180 * 3.14159;				# Winkel in Radiant umrechenen
my $sinus_winkel = int(sin($radiant)*10000+0.5) / 10000;	# Sinus ermitteln und auf 5 Stellen nach dem Komma runden
# Ausgabe in die Standardausgabe
print $sinus_winkel;

Aus einem Shell-Skript kann man es so aufrufen:

1
2
3
winkel=60
sinus=$(sinus.pl $winkel)
echo $sinus

Warum bloß kein Perl? Ich bin bei kleineren Sachen mit Perl sehr gut und schnell zurecht gekommen. Bitte nur kurze Infos, gehört ja nicht zum Thema.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Niualj schrieb:

Es reicht vollkommen aus wenn sie mir einfach nur eine möglichkeit sagen würden um von einer beliebigen zahl Sinus zu berechnen.

Wie genau muss der Sinus/Cosinus denn sein, bzw. reichen 91 Schritte für die Winkel von 0-90° oder brauchst Du 910 Schritte, 9100, ...?

Mooi

Anmeldungsdatum:
15. August 2014

Beiträge: 187

Niualj schrieb:

Das hatt super geklappt! Jetzt kann ich das direkt verwenden.

 winkel=90
echo $(awk -v winkel=$winkel 'BEGIN { printf("%10.3f\n", sin(winkel * 3.14 / 180))}')

Einfacher verwendbar ist es in einer Funktion, egal ob Perl, awk oder bc:

Sin() { awk -v winkel=$1 'BEGIN { printf("%.3f\n", sin(winkel * 3.14 / 180))}'; }

Nach dieser Definition reicht zur Verwendung:

Sin 30
Antworten |