Forum: Mikrocontroller und Digitale Elektronik Vektoren im 2D koordinatensystem


von Martin K. (spyro07)


Lesenswert?

Hi,

ich bin gerade beim Überlegen, wie man am Besten die Arbeit mit Vektoren 
im 2d Koordinatensystem mit einem µc realisieren könnte.

Ich kom aber nicht so wirklich weiter.
Man könnte ja zum Beispiel die Koordinaten eines Punkts so angeben:
-1. 8 bit x
-2. 8 bit y

so, aber jetzt weis zwar der µc die Koordinaten von einem Punkt, aber 
wie kann ich ihm dann sagen, das das ganze ein Vektor sein soll?
Das ganze soll dann sozusagen auf eine vektorielle Karte hinauslaufen.

Hat jemand noch Ideen wie man das realiseieren könnte oder gibt es da 
iwo schon ähnliche Beispieleß

mfg

Achso, was die Sache sicherlich nicht leichter macht ist das ich es in 
Assembler machen wöllte.

von Ahem (Gast)


Lesenswert?

Ob ein beliebiges Zahlenpaar Gewicht und Grösse, Guthaben und Länge, 
zwei Ordinaten oder zwei Komponenten eines Vektors sind hängt von deren 
Interpretation ab. Wenn Du damit rechnest, als wenn es Vektoren sind, 
dann sind es auch welche.

von Ahem (Gast)


Lesenswert?

Abgesehen davon macht etwa die Addition zweier Ordinaten keinen Sinn, 
weil es hiesse zwei Punkte zu irgendwie zu "addieren" obwohl diese 
Operation mathematisch garnicht definiert ist. während dies bei Vektoren 
insofern Sinn macht weil eben so die Vektoraddition definiert ist.

von Michael (Gast)


Lesenswert?

Eben, Ahem. Es kommt ganz darauf an wie man die beiden Werte behandelt. 
Das liegt ganz am Programmierer

von Ahem (Gast)


Lesenswert?

>Eben, Ahem.
Was soll das "eben" heissen?

von Michael (Gast)


Lesenswert?

Ahem, Vektoren zu addieren ist sehr wohl in der Mathematik definiert. 
Kräfte ist hierfür ein gutes Beispiel, da macht man das dauernd.

von Ahem (Gast)


Lesenswert?

Michael, ich glaube es ist besser wenn wir beide Dich ignorieren.

von Michael (Gast)


Lesenswert?

Du willst doch jetzt nicht behaupten, dass man Vektoren nicht addieren 
darf?

von Zardoz (Gast)


Lesenswert?

Ein Zahlenpaar ist aber noch kein Vektor. Dazu gehört dann schon noch 
ein zweites Zahlenpaar: Anfangs- und Endpunkt oder Punkt und Länge und 
Richtung.

Nice week,
Zardoz

von Ahem (Gast)


Lesenswert?

>Du willst doch jetzt nicht behaupten, dass man Vektoren nicht addieren
>darf?

Nein, und wenn Du nochmal mein Post von 21:01 anguckst, dann wirst Du 
sehen, das ich sogar das Gegenteil behauptet habe.

>während dies bei Vektoren insofern Sinn macht weil eben so die >Vektoraddition 
definiert ist.

von Chris K. (chrisk86)


Lesenswert?

@Michael:
Hast du den Text von "Ahem" richtig gelesen? Er schreibt doch: Vektoren 
JA, Ordinaten NEIN...

Chris

*EDIT*: Mit dem Text von gerade ist mein Post sinnlos geworden... ;)

von Michael (Gast)


Lesenswert?

Man kann auch Koordinaten addieren, das sind dann Vektoren, die auf den 
Ursprung des Koordiantensystems bezogen sind. Ob das sinnvoll ist hängt 
natürlich davon ab was die Koordinaten darstellen.

von Ahem (Gast)


Lesenswert?

>Ein Zahlenpaar ist aber noch kein Vektor.
Nein, ein Zahlenpaar ist ein Zahlenpaar ist ein Zahlenpaar.

Es kann als Vektor interpretiert werden.

>Dazu gehört dann schon noch ein zweites Zahlenpaar: Anfangs- und Endpunkt >oder 
Punkt und Länge und Richtung.
Nein!

von Michael (Gast)


Lesenswert?

PS: Ja, ich habs überlesen ^^

von Ahem (Gast)


Lesenswert?

>Man kann auch Koordinaten addieren
Nein. Diese Operation ist nicht definiert und gibt auch keinen Sinn.

>das sind dann Vektoren
Koordinaten sind keine Vektoren sonst hiessen sie ja Koordinaten.

>Koordinaten ... sind dann Vektoren, die auf den Ursprung des Koordiantensystems 
bezogen sind
Eben nicht. Das sind diejenigen Faktoren mit den die Einheitsvektoren 
multpliziert werden müssen... also ehrlich Leute, das ist doch 
elementare Mathematik. Lest doch selbst nochmal nach.

von Ahem (Gast)


Lesenswert?

>>das sind dann Vektoren
>Koordinaten sind keine Vektoren sonst hiessen sie ja Koordinaten.

muss natürlich heissen

>>das sind dann Vektoren
>Koordinaten sind keine Vektoren sonst hiessen sie ja Vektoren.


Ihr macht mich ganz hungrig. Ich gehe jetzt mal spazieren.

von Zardoz (Gast)


Lesenswert?

Ahem hat absolut recht ... ein Zahlenpaar reicht.

Nice week,
Zardoz

von Martin K. (spyro07)


Lesenswert?

Also ich habe gedacht, wenn man jetzt auf ein Hindernis stößt, dann kann 
man ja den Punkt ins Koordintensystem eintragen. Wenn man dan auf den 
nächsten stößt, kann man den auch eintragen, und den Verbindungsvektor 
bilden.
Man kann dann berechnen ob ein Punkt auf einem Vektor liegt mit 
(xQ-xP;yQ-yP) oder anders gesagt mit Vektor PQ+t*(P2;Q2), wobei dann t 
kleiner als 1 sein muss, damit die punkte dann zwischen P und Q liegen.

Nur ist dann das Problem, das ich feststellen muss, wie die Punkte dann 
richtig verbunden werden.

von Michael (Gast)


Lesenswert?

>>Koordinaten ... sind dann Vektoren, die auf den Ursprung des Koordiantensystems
>>bezogen sind
>Eben nicht. Das sind diejenigen Faktoren mit den die Einheitsvektoren
>multpliziert werden müssen... also ehrlich Leute, das ist doch
>elementare Mathematik. Lest doch selbst nochmal nach.

Du willst also sage, dass ein Vektor, der vom Ursprung auf eine 
Koordinate zeigt, kein Vektor ist? Ja, das ist elementare Mathematik.

von Ahem (Gast)


Lesenswert?

Liebster Michael

>Du willst also sage, dass ein Vektor, der vom Ursprung auf eine
>Koordinate zeigt, kein Vektor ist?
Nein, das will ich nicht. Ich habe nur sagen wollen, das eine Koordinate 
nicht das selbe ist wie ein Vektor.

Im übrigen ist ein Vektor dessen Ursprung an einen bestimmten Punkt 
gebunden ist ein sogenannter "gebundener" Vektor. Diesen Unterschied 
gibt es weil es den Unterschied zu so. "freien Vektoren" gibt. Und von 
diesen freien Vektoren redet man allgemein als "Vektoren". Von den 
freien Vektoren gibt es beliebig viele mit dem selben "Zahlenpaar". Das 
aber impliziert, das "ein" Vektor nicht mit "einer" Koordinate identisch 
ist, aber auch nicht das sie im weitesten Sinne Analoga sind. Das wird 
schon daraus ersichtlich das Vektoren, also "freie" Vektoren eine ganze 
Menge von Richtungs-Länge-Dingen sind und eine Koordinate eben nur ein 
Ding.

Ich glaube wir ignorieren Dich doch lieber.

von Ahem (Gast)


Lesenswert?

Aber dieser ganze Streit im Begriffe hilft ja dem armen Martin nicht 
weiter.

>Also ich habe gedacht, wenn man jetzt auf ein Hindernis stößt, dann kann
>man ja den Punkt ins Koordinatensystem eintragen.
Das kannst Du genau dann, wenn Du alle Ortsveränderungen gemerkt hast.

> Wenn man dan auf den nächsten stößt, kann man den auch eintragen, und den 
>Verbindungsvektor bilden.
Ich nehme an, Du meinst das nächste Hindernis?
Ja, dann kann man einen Vektor von einem Punkt zu einem anderen 
berechnen.

>Man kann dann berechnen ob ein Punkt auf einem Vektor liegt mit
>(xQ-xP;yQ-yP) oder anders gesagt mit Vektor PQ+t*(P2;Q2), wobei dann t
>kleiner als 1 sein muss, damit die punkte dann zwischen P und Q liegen.
Ich verstehe es nicht ganz, aber es sieht eben richtig nach einer 
Linearkombination aus.

>Nur ist dann das Problem, das ich feststellen muss, wie die Punkte dann >richtig 
verbunden werden.
Was meinst Du mit "zwei Punkte richtig verbinden"? Was heisst es, zwei 
Punkte zu "verbinden"? Was heisst es sie "richtig" zu verbinden?

von Martin K. (spyro07)


Lesenswert?

Das Problem mit den Punkte verbinden könnte man ja lösen, indem man an 
die Seite des Roboters einen Sensor baut, mit dem man registriert, wie 
lange sich das Hindernis noch an der Seite befindet und wenn es nicht 
mehr da ist, kann man dann den Punkt festlegen.

Dann wäre nun hier das Problem zu lösen, da es ja sinnvoll wäre nur die 
Punkt abzuspeichern, welche Punkte wie miteinander verbunden werden 
müssen. Wie könnte man soetwas programmiertechnisch am besten lösen? 
Weil es kann dann ja auch im Priznip sein, das ein Punkt mit 2 oder 
mehren anderen Punkten verbunden werden muss.

Also es ist ja so:
Der Roboter fährt einfach gerade aus.
Dann stößt er auf ein Hindernis, lenkt ab und stößt dann auf ein anderes 
Hindernis, welches mit diesem eigentlich nichts zu tun hat:

-----------------
-               -
-               -
-               -
-               -
-               -
-               -                           -------------------------
-----------------Q                       -                        -
                                        -                        -
                                       -                        -
                                    P ---------------------------


jetzt längt der Robo von P ab auf Q und schon ist das Hindernis falsch 
eingezeichnet, wenn er einfach die beiden Punkt miteinander zu einem 
Vektor bildet.

von Ahem (Gast)


Lesenswert?

Also Martin, ich denke Du solltest Dir erstmal die Grundlagen aneignen. 
Dann kann man richtig darüber sprechen.

Es scheint, das Du mit einem autonomen Fahrzeug die "Landkarte" einer 
Umgebung erzeugen willst.
Was aber genau Dein Problem ist ist mir immer noch nicht klar.

Du willst immer irgendwas "verbinden" ohne zu sagen, was denn diese 
Operation bewirken soll.

von 1234 (Gast)


Lesenswert?

Vergesst den Ahem. Etwas eng dessen Sichtweise. Allenfalls 
Mathematiker... Ein Vektor und eine Koordinate sind natuerlich dasselbe. 
Eine Koordinate plus ein Vektor gibt wieder eine Koordinate.

von Ahem (Gast)


Lesenswert?

Es sind doch völlig getrennte Probleme.
1. Die Existenz eines Hindernisses zu erkennen
2. Es aus den Daten des Weges und des Fahrzeugs heraus zu beschreiben 
(das Hinderniss)
3. Und aus den Daten aus 2. eine "Landkarte" zu erzeugen.


Verstehst Du das und stimmst Du mir zu?

von Martin K. (spyro07)


Lesenswert?

Also zu:
1. Hindernis wird erkannt und Koordinaten liegen bereit
2. Verstehe ich irgendwie nicht so richtig
3. Genau das ist das eigentliche Problem

von Ahem (Gast)


Lesenswert?

@ 1234

>Etwas eng dessen Sichtweise
Wofür ist sie zu eng?


>Ein Vektor und eine Koordinate sind natuerlich dasselbe.
Gib bitte einen Beleg für diese Behauptung an.

Ich streite ja garnicht ab, das die Zahlenwerte einer Koordinate und die 
Zahlenwerte eines Ortsvektors auf die selbe Koordinate gleich sind.
Ich räume auch ein, das man unter den genannten (und noch einigen 
ungenannten) Bedingungen Koordinaten operativ wie Vektoren behandeln 
kann.

Aber das ist eben nicht das selbe wie die Aussage, das diese beiden 
Dinge identisch oder das selbe sind.

Die oft vertretene Meinung das Mathematiker keine praktischen Probleme 
lösen können, weil sie alles so hypergenau ausdrücken, wird in diesem 
Forum (und diesem Thread) dadurch konterkariert, das die Praktiker 
praktische Probleme nicht lösen können weil sie die Begriffe und 
Zusammenhänge nicht kennen.

Etwaige Bemühungen durch eine exakte Darstellung der Zusammenhänge 
stehen ja einer praktischen Anwendung überhaupt nicht im Wege! Oder wie 
sollte das zugehen? Man muss meiner Ansicht nach nur eben sagen, das man 
eine gewisse Analogie herstellt, einen gewissen Unterscheid ignoriert 
uswusf.

Also wofür ist diese Sichtweise zu eng?

von Ahem (Gast)


Lesenswert?

@ Martin

>1. Hindernis wird erkannt und Koordinaten liegen bereit
OK. Das ist doch schon mal was.

>2. Verstehe ich irgendwie nicht so richtig
Naja, das hängt mit der Art und Weise zusammen wie Du die Position und 
den Weg des Fahrzeugs feststellst und mitschreibst und in welcher 
örtlichen Lage relativ zu irgendeinem Koordinatenursprung Dein Sensor 
sich befindet und ob er eine irgendwie konstruktiv vorgegebene Richtung 
oder Richtungen hat, in denen er das Hinderniss anzeigt.

Z.B. Stell Dir vor Du hast einen Sensor der in genau einer Richtung auf 
Druck reagiert. Welchen Unterschied machtes wohl die Form des "Bumpers", 
also desjenigen Bauteils das die Kraft auf den Sensor leitet.


+-----------+  |
|           |  |
|  Sensor   +--|  also eine gerade Platte oder Stange
|           |  |
+-----------+  |

oder so

+-----------+ |
|           |  |
|  Sensor   +---| also ein Bogen oder irgendwie gekrümmter Rahmen
|           |  |
+-----------+ |

Und dann: Wie ermittelst Du die Koordinaten? Wegmessung? Ortsbestimmung?

>3. Genau das ist das eigentliche Problem
Das hängt auch davon ab, was Du mit den Daten eigentlich anfangen 
willst.

von Zardoz (Gast)


Lesenswert?

Dann mal als Praktiker gefragt:

Wäre es nicht einfacher, der Roboter merkt sich zunächst einfach nur die 
Koordinaten (Punkte), an denen er auf ein Hindernis gestoßen ist? Mit 
zunehmender Anzahl gespeicherter Punkte müsste er jeweils entscheiden, 
ob der Abstand zweier Punkte groß genug ist, um einen Versuch zu machen, 
es zwischen ihnen erneut zu versuchen.

Nice week,
Zardoz

von Ahem (Gast)


Lesenswert?

Wenn Du aber so kompliziert (also Punkt 2) da nicht heran gehen willst 
und eben dabei bleibst, das die Koordinaten eben einfach da sind, dann 
bleibt ja nur noch Punkt 3.

OK. Was hindert Dich daran diese Koordinaten einfach in einer Tabelle zu 
speichern?
Es gibt sicherlich andere Wege die Koordinaten zu organisieren, aber das 
hängt eben davon ab was Du damit machen willst.

Lies Dir doch mal die entsprechenden Kapitel "Algorithmen in C" von 
Sedgewick durch. Da solltest Du ein paar Anregungen finden.

von Ahem (Gast)


Lesenswert?

>Wäre es nicht einfacher, der Roboter merkt sich zunächst einfach nur die
>Koordinaten (Punkte), an denen er auf ein Hindernis gestoßen ist? Mit
>zunehmender Anzahl gespeicherter Punkte müsste er jeweils entscheiden,
>ob der Abstand zweier Punkte groß genug ist, um einen Versuch zu machen,
>es zwischen ihnen erneut zu versuchen.

Meinte er das mit "verbinden"?
Hmmm. Naja, zwei Hindernispunkte, die näher zueinander liegen als die 
Breite des Fahrzeugs in irgendeiner seiner möglichen Bewegungsrichtungen 
können wohl als "Verbunden" gelten. Das Fahrzeug kann ja nicht zwischen 
Ihnen hindurch.

Aber der umgekehrte Schluss ist nicht so einfach möglich. Wenn zwei 
Punkte (in einem weiten Abstand) Hindernisse sind, so spielt jedenfalls 
auch die Bewegungsrichtung eine Rolle. Ich würde das eher als Vektorfeld 
(Tensor) speichern.

Siehe z.B.:


               +------+
             F>|
               |
   F>-----     +------+


- und + sind Hindernisse

F ist das Fahrzeug und > seine Bewegungsrichtung.

von Michael (Gast)


Lesenswert?

>Ich glaube wir ignorieren Dich doch lieber.

Nur weil wir aneinander vorbei reden willst du mich ignorieren? OK, 
davon kann ich niemanden abhalten.

von Ahem (Gast)


Lesenswert?

@ Martin

Habe Dein Posting von 21:43 noch garnicht gelesen.

von Zardoz (Gast)


Lesenswert?

Ich denke schon, daß er das mit "verbunden" meint.

Die Bewegungsrichtung des Fahrzeugs spielt sicher eine Rolle. Allerdings 
kann man mit einfachen Mitteln keine "Richtung" eines Hindernisses 
erkennen. Insofern dürfte es doch auf eine Punkteliste hinauslaufen.

Nice week,
Zardoz

von Ahem (Gast)


Lesenswert?

@ Zardos

>kann man mit einfachen Mitteln keine "Richtung" eines Hindernisses
Ich denke schon. Man kennt ja seine Bewegungsrichtung bzw. die 
Bewegungsrichtung des Sensors und seine Geometrie.

Ich finde die ganze Idee eher etwas fraglich, wenn ich sie recht 
verstehe. Echte Hindernisse sind nur die Punkte an denen man tatsächlich 
auf Hindernisse stiess. Keine dazwischenliegenden aber nicht tatsächlich 
berührten Punkte (ausser vielleicht mit der Ausnahem der von uns oben 
genannten).

Ich stelle mir das Fahrzeug eher wie eine Lichtquelle vor deren Licht 
auf verschiedene Flächen fällt. Was das Fahrzeug erkennen kann sind 
Projektionen des Bewegungsvektors auf Flächen deren Ausdehnung, Lage und 
Orientierung nicht bekannt sind. Ja, nichteinmal, ob es sich um eine 
Fläche handelt kann man ermitteln. Durch die Berührung erhält man nur 
Informationen über einen Punkt entlang des Bewegungsvektors (evtl. 
modifziert durch die Bumpergeometrie). Nicht mehr.

Alles andere beruht auf Annahmen und ist damit unzuverlässig.

von Alex (Gast)


Lesenswert?

vector.h
1
typedef struct Vector
2
{
3
    uint8_t x;
4
    uint8_t y;
5
} Vector;
6
7
void initVector(Vector* v, uint8_t X, uint8_t Y);
8
Vector addVector(Vector* a, Vector* b);
9
// weitere Funktionen

vector.c
1
void initVector(Vector* v, uint8_t X, uint8_t Y)
2
{
3
    v->x = X;
4
    v->y = Y;
5
}
6
7
Vector addVector(Vector* a, Vector* b)
8
{
9
    Vector v;
10
    v.x = a->x + b->x;
11
    v.y = a->y + b->y;
12
    return v;
13
}
14
// weitere Funktionen

von Zardoz (Gast)


Lesenswert?

@Ahem

Du hast wieder einmal Recht - man sollte schon auch die Richtung 
speichern, in der man auf ein Hindernis getroffen ist.

Aber als fragwürdig würde ich das Ganze nicht bezeichnen. Das Bild der 
Umgebung entspricht eben den Möglichkeiten des "Sinnes", mit dem sie 
erfasst wird. Könnte der Mensch Einzelheiten auf atomarer Ebene 
unterscheiden, würde er auch eine ganz andere Welt sehen.

>> Ja, nichteinmal, ob es sich um eine Fläche handelt kann man
>> ermitteln. Durch die Berührung erhält man nur Informationen
>> über einen Punkt entlang des Bewegungsvektors (evtl.
>> modifziert durch die Bumpergeometrie). Nicht mehr.

Eben. Also macht es auch keinen Sinn, etwas anderes als eben diese 
Punkte (sowie den Bewegungsvektor) zu speichern.

Interessanter würde es mit Entfernungs- und/oder Bewegungssensoren. Die 
"Welt" würde jedenfalls anders aussehen ...

Nice week,
Zardoz

von Ahem (Gast)


Lesenswert?

@ Zardoz

>Aber als fragwürdig würde ich das Ganze nicht bezeichnen. Das Bild der
>Umgebung entspricht eben den Möglichkeiten des "Sinnes", mit dem sie
>erfasst wird. Könnte der Mensch Einzelheiten auf atomarer Ebene
>unterscheiden, würde er auch eine ganz andere Welt sehen.
Ich habe ja nicht die Idee der Wahrnehmung an sich in Frage gestellt.
Meine Zweifel beziehen sich auch nicht darauf, das das Verfahren nicht 
hoch genug auflösend wäre. Das käme auf den Einsatzzweck an.

Ich habe es vielleicht nicht ausführlich genug beschrieben, aber woran 
ich Zweifel habe ist, das Verfahren, zwei Punkte, an denen man auf 
Hindernisse getroffen ist zu "verbinden" in dem Sinne, das man annimmt, 
das sich dazwischen auch "Hinderniss" befindet.

>>> Ja, nichteinmal, ob es sich um eine Fläche handelt kann man
>>> ermitteln. Durch die Berührung erhält man nur Informationen
>>> über einen Punkt entlang des Bewegungsvektors (evtl.
>>> modifziert durch die Bumpergeometrie). Nicht mehr.

>Eben. Also macht es auch keinen Sinn, etwas anderes als eben diese
>Punkte (sowie den Bewegungsvektor) zu speichern.

Was soll diese "Eben" heissen? Es macht eher mehr Sinn die Geometrie des 
Fahrzeugs und Bumpers zu berücksichtigen, als nur einen Punkt als 
Hinderniss zu speichern. Das ist nämlich genau die Aussage, die man 
erhält wenn es "nicht weitergeht". Das das Fahrzeug irgendwo an seiner 
Aussenkante entlang seiner Bewegungsrichtung anstösst. Das wird also in 
der Regel eine Fläche sein, nämlich die welche das Fahrzeug in Richtung 
seiner Bewegung hat. Man weiss ja nicht genau wo an seiner Aussenfläche 
das Fahrzeug angestossen ist. Nur ist das eine ganz andere Aussage als 
zu sagen, da "sei" eine Fläche als Hinderniss, was aus dem "verbinden" 
der Hindernisspunkte folgt.


Seien '*' das Hinderniss, '>' die Bewegungsrichtung, 'F' das Fahrzeug 
sowie '.' die Begrenzung der Welt, so ergibt etwa folgende Situation:

....................
.       |          .
.     F>|*         .
.       |          .
.                  .
....................

welches "Weltbild"?

....................
.        *         .
.        *         .
.        *         .
.                  .
....................

oder

....................
.                  .
.        *         .
.                  .
.                  .
....................
(hier ist nur das originale Hindernis eingezeichnet).
?

Ich meine das Weltbild sollte ehr so aussehen:
Wobei '?' heisst, dort ist irgendwo ein Hinderniss, aber seine genaue 
Position ist in dem Bereich der möglichen Anstosslinie unbestimmt.
....................
.        ?         .
.        ?         .
.        ?         .
.                  .
....................

Wenn ich nun von verschiedenen Seiten und mit seitlichem Versatz an den 
ursprünglichen Punkt heranfahre, engt sich das vermutete Hindernis immer 
mehr ein.

Die letzte Frage zielt auf den Einfluss der Fahrzeuggeometrie auf das 
angenommene Weltbild.


Dann aber noch die Ausgangsfrage: Kann ich zwei Punkte, an denen ich 
angestossen bin, als materiell verbunden annehmen?

1. Anstoss
....................
.       |          .
.     F>|*         .
.       |          .
.                  .
.                  .
.        *         .
....................

2. Anstoss
....................
.                  .
.        *         .
.                  .
.       |          .
.     F>|          .
.       |*         .
....................

Sieht die Welt nun so aus?:

....................
.        *         .
.        *         .
.        *         .
.        *         .
.        *         .
.        *         .
....................

Beim lesen des Threads, sehe ich aber auch das der Eröffner davon sprach 
einen "seitlichen" Sensor zu benutzen. (30.03.2009 21:43)
Das könnte eine Verbesserung bringen. Mal überlegen. Sind die 
Hindernisse elastisch? Wie sorge ich dafür das die Auslösekraft seitlich 
immer hoch genug ist?

von Benjamin S. (recycler)


Lesenswert?

Sollte man beim Vektor nicht den Startpunkt festlegen und dessen Länge. 
Etwas fehlt mir. Ich würde es so machen, um den obigen Code nochmals 
aufzugreifen.

vector.h
1
typedef struct Vector
2
{
3
    uint8_t x;
4
    uint8_t y;
5
    uint8_t x_length;
6
    uint8_t y_length;
7
} Vector;
8
9
void initVector(Vector* v, uint8_t X, uint8_t Y, uint8_t X_length, uint8_t Y_length);
10
Vector addVector(Vector* a, Vector* b);
11
// weitere Funktionen
vector.c
1
void initVector(Vector* v, uint8_t X, uint8_t Y, uint8_t X_length, uint8_t Y_length)
2
{
3
    v->x        = X;
4
    v->y        = Y;
5
    v->x_length = X_length;
6
    v->y_length = Y_length;
7
}
8
9
Vector addVector(Vector* a, Vector* b)
10
{
11
    Vector v;
12
    v.x        = a->x;
13
    v.y        = a->y;
14
    v.x_length = a->x_length + b->x_length;
15
    v.y_length = a->y_length + b->y_length;
16
    return v;
17
}
18
// weitere Funktionen

von Zardoz (Gast)


Lesenswert?

@Ahem

> Ich habe es vielleicht nicht ausführlich genug beschrieben,
> aber woran ich Zweifel habe ist, das Verfahren, zwei Punkte,
> an denen man auf Hindernisse getroffen ist zu "verbinden"
> in dem Sinne, das man annimmt, das sich dazwischen auch
> "Hinderniss" befindet.

Da stimme ich absolut zu - haben wir also ein wenig aneinander vorbei 
diskutiert.

Nach dem von Dir beschriebenen Anstossen an ein Hindernis würde ich 
folgendes "Weltbild" bevorzugen:

1. Anstoss
....................
.       |          .
.     F>|*         .
.       |          .
.                  .
.                  .
.        *         .
....................

2. Anstoss
....................
.                  .
.        *         .
.                  .
.       |          .
.     F>|          .
.       |*         .
....................

Ergebnis
....................
.                  .
.        *         .
.                  .
.                  .
.                  .
.        *         .
....................

Ist der Abstand der zwei Punkte kleiner als die Breite des Fahrzeugs 
könnte man einen Weg dazwischen versuchen. Endet auch der an einem 
Hindernis, hinge das weitere Vorgehen von den sich daraus ergebenden 
neuen Abständen ab.

Verfeinerte Sensoriken des Fahrzeugs würden natürlich zu einem 
verfeinerten Vorgehen führen.

Was die Frage nach dem Sinn des Ganzen betrifft: Möglicherweise geht es 
einfach nur um Erkenntnisgewinn?

Nice week,
Zardoz

von Karl H. (kbuchegg)


Lesenswert?

Benjamin S. wrote:
> Sollte man beim Vektor nicht den Startpunkt festlegen und dessen Länge.

Nein.
Schon alleine deswegen, weil ein Vektor keinen Startpunkt hat.
Ein Vektor hat eine Länge und eine Richtung.
Beides kannst du durch ein einziges Zahlenpaar wunderbar ausdrücken.

Was hier gespeichert wird, sind keine Vektoren, sondern Punkte.
Auch wenn die Unterscheidung zwischen den beiden im voreliegenden Fall 
unerheblich scheint, so sind die Dinge doch zu trennen:

Ein Punkt ist eine Koordinate im Raum
Um von einem Punkt zu einem anderen Punkt zu kommen, wird zu dem Punkt 
ein Vektor hinzuaddiert. Die Differenz zwischen zwei Punkten ist ein 
Vektor.

Wenn man so will, ist die Unterscheidung Vektor-Punkt, gleichbedeutend 
mit der Unterscheidung  Ort und Distanz. Ein Ort ist keine Distanz und 
eine Distanz ist kein Ort. Aber um vernünftig rechnen zu können, braucht 
man beides. Und da Vektoren und Punkte gleich gespeichert werden können 
(ein Zahlenpaar reicht im 2D) kommt immer wieder diese Konfusion 
zustande.

von Benjamin S. (recycler)


Lesenswert?

Danke,
ich hab mein Problem erkannt. Ich kann ja den Vektor hinschieben wo ich 
will. Aber am Bildschirm beginnt er immer an einem definiertem Ort. Da 
lag mein Problem. Ich errinnere mich.
Danke für die Hilfe :)

von Karl H. (kbuchegg)


Lesenswert?

Benjamin S. wrote:
> Danke,
> ich hab mein Problem erkannt. Ich kann ja den Vektor hinschieben wo ich
> will. Aber am Bildschirm beginnt er immer an einem definiertem Ort. Da
> lag mein Problem. Ich errinnere mich.
> Danke für die Hilfe :)

Was du am Bidschirm hast, ist kein Vektor sondern eine Linie.
Eine Linie hat Startpunkt und Endpunkt. Die kann man zb speichern, indem 
man beide Punkte speichert, oder aber in dem man Startpunkt und Vektor 
speichert. Beides ist möglich (und trivialerweise ineinander 
überführbar)

von Benjamin S. (recycler)


Lesenswert?

Genau da lag mein anfängliches Problem :)

von Ahem (Gast)


Lesenswert?

@ Zardoz

Ich stimme Deiner Ansicht nicht zu, das das von Dir beschrieben Weltbild 
ein sinnvolles wäre. Es beruht nicht auf Information, sondern darauf was 
Du Dir "wünschst", wenn ich Deiner Wortwahl mal folge.
Vielleicht hast Du aber auch nur übersehen, das ich die '|' als Teil des 
Bumpers beschrieben habe. Damit kann der Anstosspunkt, das Hindernis, 
potentiell überall entlang einer Linie liegen, die orthogonal zu 
Bewegungsrichtung die Kante des Bumpers bildet.

Ich habe auch den Sinn des Verfahrens (die Punkte zu verbinden) gemeint; 
nicht der gesamten Fragestellung im Kontext des Lebens einer Person oder 
der Anstrengungen einer Gruppe wie dieses Forum.

von Zardoz (Gast)


Lesenswert?

@Ahem

> Ich stimme Deiner Ansicht nicht zu, das das von Dir beschrieben
> Weltbild ein sinnvolles wäre. Es beruht nicht auf Information,
> sondern darauf was Du Dir "wünschst", wenn ich Deiner Wortwahl
> mal folge.

Ich vermute mal, das bezieht sich darauf:

> Vielleicht hast Du aber auch nur übersehen, das ich die '|' als
> Teil des Bumpers beschrieben habe. Damit kann der Anstosspunkt,
> das Hindernis, potentiell überall entlang einer Linie liegen, die
> orthogonal zu Bewegungsrichtung die Kante des Bumpers bildet.

Das stimmt natürlich. Man könnte sagen, die "Auflösung" dieses 
(primitiven) "Tastsinns" entspricht der Breite des Bumpers.

> Ich habe auch den Sinn des Verfahrens (die Punkte zu verbinden)
> gemeint; nicht der gesamten Fragestellung im Kontext des Lebens
> einer Person oder der Anstrengungen einer Gruppe wie dieses Forum.

Eben das meinte ich auch: Erkenntnisgewinn des Fahrzeugs über seine 
Umgebung.

Nice week,
Zardoz

von Martin K. (spyro07)


Lesenswert?

Hi,
also erstmal vielen Dank für die vielen Antworten.
So wie ich es sehe, ist es wohl doch sinnvoller nur die einfachen Punkte 
zu speichern.

Übrigens wollte ich die Hindernisse mit IR-Sensoren messen, nur ist hier 
dann das Problem, das die Wegmessung genauer ist als die 
Hindernismessung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.