Wie kann ich eine Zahl so multiplizieren dass das Ergebnis mit "0," beginnt?

...komplette Frage anzeigen

10 Antworten

Deine Frage ist nicht ganz klar. Ich verstehe es so:

Du hast eine (Gesamt-)Entfernung x, die der Gegenstand sich wegbewegt, bevor er stehen bleibt. Jetzt willst du, dass der Gegenstand (ich vermute linear?) langsamer wird, bis er diese Entfernung x erreicht.

Auf der "Achse" von 0 Entfernung bis x Entfernung geben wir jetzt zunächst jeden Entfernungspunkt (nennen wir sie mal y) als Zahl von 0 bis 1 an, sodass nachher die Relationen noch genau stimmen. Das erreichen wir, indem wir die aktuelle Entfernung y an jeder Stelle durch die Gesamtentfernung x teilen:

Entfernung als Dezimalzahl (Zahl von 0 bis 1) = y / x

Die Geschwindigkeit lässt sich jetzt an jeder Stelle darstellen, wenn du die
Startgeschwindigkeit ( =Maximalgeschwindigkeit) miteinbeziehst, ich nenne sie mal z.

Da die Entfernung als Dezimal (y/x) nun der Faktor ist, mit dem die Startgeschwindigkeit multipliziert werden muss, ergibt sich die Geschwindigkeit an jeder Entfernung y in Abhängigkeit von der zuvor festgelegten Gesamtentfernung x und der zuvor festgelegten Startgeschwindigkeit z als:

z * (y/x) ---> das kannst du noch umformen, um das y an jeder Stelle mit einem (einfach ausrechenbaren) Wert multiplizieren zu können

z * (y/x) = (z*y) / x = y * (z/x)

Das bedeutet, der Faktor, mit dem du die Entfernung y multiplizieren musst, ist (z/x) bzw. [Maximalgeschwindigkeit / Maximalentfernung].

Erstmal danke für die ausführliche Antwort. Leider kann ich das so nicht anwenden, weil es keine bestimme maximal Entfernung gibt. Gegeben ist nur eine maximal-(also anfangs)  Geschwindigkeit, und die Geschwindigkeit soll immer langsamer werden je weiter das Objekt sich entfernt. Natürlich würde das Objekt irgendwann stehen bleiben, also gibt es eine Maximalentfernung, jedoch ist mir diese nicht bekannt. 

0
@LeXas778

Es gibt einen Radius um ein Objekt herum. Ein zweites Objekt bewegt sich zunächst mit gleicher Geschwindigkeit vom ersten Objekt weg. Sobald das zweite Objekt diesen radius überschritt soll es langsamer werden. Und wie langsamer es werden soll will ich bestimmen indem ich die Distanz von den beiden Objekten minus den radius nehme (distanz-radius=y) und das mit der Geschwindigkeit (x) multipliziere (x*y) Doch dann würde das Objekt ja schneller werden. Deshalb brauche ich eine dezimalzahl zwischen 0 und 1.

0

indem du das Komma um so viele Stellen nach links verschiebst, dass du 0,x erhälst. Das machst du indem du mit einer 0, Zahl multiplizierst. Diese Zahl muss so viele Nullen enthalten, wie x Stellen hat und als letztes dann eine 1

Bsp: x = 153. x hat 3 Stellen also multiplizierst du mit 0,001 (153*0,001 = 0,153)

Bsp: x = 123345: x hat 6 Stellen also multiplizierst du mit 0,000001
(123345*0,000001 = 0,123345)

Komplizierter wird es wenn x selbst schon ein Komma enthält. Dann musst du mit einer Zahl multiplizieren die so viele Nullen enthält wie x vor dem Komma Stellen hat und als letztes eine 1.

Bsp: x = 123,45: x hat 3 Stellen vor dem Komma also multiplizierst du mit 0,001 (123,45*0,001 = 0,12345)

Ich hoffe ich konnte helfen

Das ist bis jetzt die hilfreiche Antwort.  Jedoch ist x eine Zahl die jedes Mal anders ist und ich weiß nicht wieviel Stellen sie hat.  Weißt du vielleicht eine Formel in die man x einsetzen kann und man dann die Stellen erhält? Oder eine andere Möglichkeit herauszufinden wieviel Stellen eine Zahl hat ohne zu wissen welche Zahl es ist. Hoffe ich konnte mich verständlich ausdrücken. 

0
@LeXas778

Hast du eine konkrete Aufgabe?

Wobei es theoretisch ja auch sein kann, dass x selbst schon eine Kommazahl ist... Wenn x zum Beispiel 0,0003 ist und du auf 0,3 kommen willst dann müsstest du mit einer Zehnerpotenz (in diesem Fall 1000) multiplizieren statt dividieren.

Welche Klasse bist du denn?

0

Ich hab gerade gesehen, dass du das programmieren willst.

Da kannst du doch einfach eine Methode/Funktiion schreiben, die dir die Ziffern vor dem Komma von x zählt. ist x als int oder als double definiert?

wenn als int geht folgende Funktion

int Ziffern_vor_Komma(int x){

int ct=0;

while(x!=0){
           x = x/10;
           ct++;

return ct;

}

0

Sorry der Kommentar vorhin ging zu früh los...

Ich hab gerade gesehen, dass du das programmieren willst.

Da kannst du doch einfach eine Methode/Funktiion schreiben, die dir die Ziffern vor dem Komma von x zählt. ist x als int oder als double definiert?

wenn als int geht folgende Funktion

int Ziffern_vor_Komma(int x){

int ct=0;

while(x!=0){
           x = x/10;
           ct++;

return ct;

}

wenn x ein double (reell) ist geht:

int Ziffern_vor_Komma(double x){

int ct=0;

/*falls x nicht positiv sein muss musst du die Methode für absoluten Betrag nehmen, oder Vorzeichen weglassen*/

if(x<0) x=-x;

while(x>0){
           x = x/10;
           ct++;

return ct;

}

0
@habFrage

Meine Zahl ist ein float. Deine Funktion hat einen guten Ansatz (die mit double) aber ich glaube es wäre eine unendliche schleife da das Ergebnis einer Division niemals null ergibt. 

0
@LeXas778

sorry, stimmt. vertippt musste heoßen größer als 1... war im Multitasking und doch nicht so Multitaskiing wie gehofft

1
@habFrage

Vielen Dank ich werde morgen mal versuchen so eine Funktion in mein spiel einzubauen :) 

0
@LeXas778

sorry, stimmt. vertippt musste heißen größer als 1... war im Multitasking und doch nicht so Multitaskiing wie gehofft. Mit float geht es genau so...

Im letzten Schritt musst du dann einfach x durch 10^ct teilen

float ergebnis =10/pow(10,Ziffern_vor_Komma(x)); ...

pow ist in der Bibliothek math.h zu finden sowohl java als auch c++

in welcher Programmiersprache programmierst du denn und was wird das für ein Spiel? Wenn ich schon helfe, interessiert mich wobei ;)

0
@habFrage

Es ist ein Spiel, was ich zur Übung mit dem Umgang mit Unity mache. Es ist ein Top Down 2D Shooter. Ich habe das Problem jetzt auf eine andere Weise gelöst. Trozdem Danke für die Hilfe.

0
@LeXas778

Ok, freut mich, dass du dein Problem lösen konntest! Viel Erfolg bei deinem Spiel! In welcher Programmiersprache programmierst du denn?

0

Hm, du suchst also eine monton fallende Funktion.

Pauschal würde ich mal
v(x)=v_0*(1/x) nehmen.

v_0 ist deine Anfangsgeschwindigkeit, und x die Entfernung.
v(x) gibt dann die Geschwindigkeit bei der Entfernung x an.

Wenn dir das teil zu schnell abfällt bzw. kleiner wird, nimm stat 1 eben 999999999 oder sowas im Nenner.

1/x befindet sich für x>0 jedenfalls immer zwischen 0 und 1.
nur für den Fall  x=0 musste aufpassen da der dir von der Mathe her nen Fehler liefert.

Sie könnten einfach R/x als Faktor nehmen, wobei R der Radius und x die Distanz ist.

if ( x >= R) {     Geschwindigkeit *= R/x;   }

Wenn Ihnen die Abnahme nach x = R zu groß ist, einfach die Wurzel aus dem Faktor nehmen.


"aus x (der Entfernung) 0,x (eine Zahl zwischen null und eins)  zu machen um diese mit der Schnelligkeit zu Multiplizieren."

Hier ist die Funktion f(x)=1/(sqrt(x)+1).
Wie gewünscht  liefert sie f(0)=1 und lim x->oo f(x)=0

Ich nehm an, Du willst eine Zahl von 0 bis x auf den Bereich zwischen 0 und 1 abbilden? Dann Teile durch x. Wenn Du x nicht kennst, dann gehe alle Zahlen durch und finde das Maximum. Das ist dann Dein x.

Ich möchte dass aus einer zahl x 0,x wird. 

0

Wenn deine Zahl x ist, dann multipliziere sie z.B. mit 1/(2x)
Das ergibt IMMER: 0,5

0× x (also irgendwas)

Wenn du null mal (jetzt zum Beispiel) fünf rechnest, bekommst du auch null raus. Anders geht es aber nicht.

Deine Angaben sind mir nicht ganz klar. Was möchtest Du berechnen?

Ich habe einen Gegenstand der sich von einem anderen Gegenstand weg bewegt. Ich will,  dass die Schnelligkeit immer mehr abnimmt also je weiter der sich entfernende Gegenstand sich entfernt, desto langsamer bewegt er sich. Das möchte ich mit einer Multiplikation erreichen und deswegen brauche ich eine Möglichkeit aus x (der Entfernung) 0,x (eine Zahl zwischen null und eins)  zu machen um diese mit der Schnelligkeit zu Multiplizieren. 

0

Dafür brauchst Du ja lediglich die Geschwindigkeitsabnahme als Prozentwert der jeweiligen Geschwindigkeit definieren?!

0

Es funktioniert sicher, wenn zwei Zahlen miteinander multipliziert werden, die mit "0," beginnen. ;-)

Ich habe aber nicht zwei Zahlen die mit "0," beginnen sondern eine Zahl und aus dieser will ich eine Zahl zwischen null und eins erhalten. 

0

Was möchtest Du wissen?