Schrift
[thread]10786[/thread]

Strecke in Binäre Folge umwandeln



<< >> 6 Einträge, 1 Seite
Mako
 2007-11-13 12:27
#102331 #102331
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich könnt ein wenig Hilfe gebrauchen, oder mal wieder einen gute Tipp ;)

Also ich habe ein Hauptprogramm das mir einen Hash an ein Unterprogramm übergibt. In diesem Hash sind Punkte einer Form gespeichert (x,y, Werte eines Flügelquerschnitts).
h->{index}{X1} = Wert
h->{index}{Y1} = Wert

Dieses Strecken (von einem Punkt zum nächsten) will ich in Binäre Folgen umwandeln um damit zwei Schrittmotoren (einen für die X-Richtung und einen für die Y-Richtung) anzusteuern.

Diese Folge speicher ich dann in eimem Array(@stream), dieses will ich dann später auf einen SRAM speichern.

Hier mal der Syntax von meinem Package:
(einige Sachen sind auskommentiert, weil ich das Package momentan immer alleine teste, also nicht wundern)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#package bitcreator;

use strict;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = sub { my @keys = sort {$a cmp $b} keys %{@_}; return \@keys; };

#sub bitcreator {

my $h = {};#shift;
$h->{0}{X1} = 0;
$h->{0}{Y1} = 0;
$h->{1}{X1} = 6;
$h->{1}{Y1} = 4;
my @stream;
# cuttingmaschine 34 cm = 32000 steps on each motor (x,y)


my @keys = sort { my $x = $a; $x ||= 0; my $y = $b; $y ||= 0; $x <=> $y} keys %{$h};
for my $a(1..$#keys){
my $xbefore = $h->{$a-1}{X1};
my $ybefore = $h->{$a-1}{Y1};
my $x = $h->{$a}{X1};
my $y = $h->{$a}{Y1};

my $distx = ($x - $xbefore) #realer Wert in cm
my $disty = ($y - $ybefore) #realer Wert in cm

# y = m * x + t
my $m = ($ybefore - $y) / ($xbefore - $x);
my $t = $y - ($x * $m);


my $anzxsteps = sprintf("%0.f",($distx ));#* (32000/34)));
my $anzysteps = sprintf("%0.f",($disty ));#* (32000/34)));

my $stepsizeX = $distx / $anzxsteps;
my $stepsizeY = $disty / $anzysteps;

if ($anzxsteps >= $anzysteps){
my $Xbit = 1;
for my $b (1..$anzxsteps){
my $Ybit = 0;
my $y1 = $m * ($b*$stepsizeX) + $t;
if (sprintf("%0.f",$y1 / $stepsizeY) >= $y1) {$Ybit = 1;}
push @stream,$Xbit,$Ybit;
}#end for $b
}#end if

else{
my $Ybit = 1;
for my $b (1..$anzysteps){
my $Xbit = 0;
my $x1 = (($b*$stepsizeY) - $t) / $m;
if (sprintf("%0.f",$x / $stepsizeX) >= $x1) {$Xbit = 1;}
push @stream,$Xbit,$Ybit;
}#end for $b
}#end else

}#end for $a

print "@stream\n";

#} # end sub

#1;



wie gesagt es funktioniert nicht, oder gibts vielleicht einen anderen Weg um ans Ziel zu kommen und mir fällt das nur nicht ein.

mfg
Danke
renee
 2007-11-13 12:52
#102332 #102332
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mako+2007-11-13 11:27:47--

[...]
wie gesagt es funktioniert nicht, oder gibts vielleicht einen anderen Weg um ans Ziel zu kommen und mir fällt das nur nicht ein.

mfg
Danke


Ohne mir den Code anzuschauen... *Was* funktioniert nicht? Was erwartest Du? Was bekommst Du? Ein paar Dummydaten solltest Du auch posten...


Wie frage ich bei Perl-Community?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Mako
 2007-11-13 13:32
#102336 #102336
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Mein Problem daran ist das der Code den ich da geschrieben hat keine richtige Bitfolge ausgibt.
z.B.
für den Fall dass die Strecke von 0,0 nach 6,4 verlaufen soll erwarte ich eine Bitfolge von 11 10 11 11 10 11
Diese Bitfolge gibr er richtig aus.

Falls ich die Strecke aber ändere z.B. von 0,0 auf 7,1 erwarte ich eine Bitfolge von 10 10 11 10 10 10, bekomme aber 10 10 11 11 11 11

Ich hoffe ich damit kannst du was anfangen.
Ich hab auch noch ein bischen ggegoogelt und bin auf den Bresenham-Algorithmus gestossen, das sieht ziemlich so aus wie ich es brauchen würde.
http://de.wikipedia.org/wiki/Bresenham-Algorithmus
Mako
 2007-11-15 10:27
#102430 #102430
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Hab ne lösung gefunden.
Trotzdem Danke.
renee
 2007-11-15 10:36
#102431 #102431
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und die sieht wie aus??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Mako
 2007-11-22 13:16
#102772 #102772
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
is zwar nicht gerade toll programmiert, aber ich hab folgendes getan.

Meine Schrittmotoren haben eine feste Schrittweite von ca. 10 um.

Über eine Geradengleichung habe ich mir den nächsten Punkt berechnet.

Von meinem aktuellem Punkt aus habe ich dann einfach ausprobiert welche Abweichung zum berechneten Punkt größer ist, die mit "gegangenen Schritt" oder die "ohne".


Wie gesagt ist zwar nicht der Königsweg aber es geht, also momentan glaube ich das zumindest. Ich muss das ganze erst noch irgendwie testen, aber soweit bin ich noch nicht.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-11-13 12:27.