Mod-Operator in ios

Lesezeit: 2 Minuten

Benutzer-Avatar
nuteron

Ich habe nach einem Mod-Operator in iOS gesucht, genau wie der % in c, aber kein Glück beim Finden. Versuchte die Antwort in diesem Link, aber es gibt den gleichen Fehler. Ich habe eine Float-Variable ‘rotationAngle’, deren Winkel basierend auf der Fingerbewegung des Benutzers inkrementiert oder dekrementiert wird. Etwas wie das:

if (startPoint.x < pt.x) {
    if (pt.y<936/2) 
        rotationAngle += pt.x - startPoint.x;
    else
        rotationAngle += startPoint.x - pt.x;   
    }
    rotationAngle = (rotationAngle % 360);
}

Ich muss nur sicherstellen, dass der Rotationswinkel die Grenze von +/- 360 nicht überschreitet. Jede Hilfe, jeder Körper. Vielen Dank

  • Eh, Objective-C geht von C aus. Also C’s % Operator funktioniert auch in Objective-C. Jedoch Schwimmer können das nicht % Sie müssen es also zuerst zu einem int machen.

    – Tom van der Woerdt

    27. April 2012 um 13:15 Uhr


Sie können verwenden fmod (zum double) und fmodf (zum float) von math.h:

#import <math.h>

rotationAngle = fmodf(rotationAngle, 360.0f);

  • Danke, aber es funktioniert auch ohne Import von math.h, sehr kurz und präzise.

    – Nuteron

    7. Juni 2012 um 5:57 Uhr

Benutzer-Avatar
Kuba

Verwenden Sie die fmod Funktion, die ein Gleitkomma-Modulo ausführt, zur Definition siehe hier: http://www.cplusplus.com/reference/clibrary/cmath/fmod/. Beispiele zur Funktionsweise (mit den Rückgabewerten):

fmodf(100, 360); // 100
fmodf(300, 360); // 300
fmodf(500, 360); // 140
fmodf(1600, 360); // 160
fmodf(-100, 360); // -100
fmodf(-300, 360); // -300
fmodf(-500, 360); // -140

fmodf nimmt “float” als Argumente, fmod dauert “doppelt” und fmodl dauert “doppelt lang”, aber sie tun alle dasselbe.

  • Vielen Dank für Ihre Antwort, das funktioniert, Ziel c ist so vielfältig, sobald Sie eine Methode wie aufrufen [self methodName:parameters]in der nächsten Zeile rufen Sie eine Methode wie methodName(parameters) auf.

    – Nuteron

    7. Juni 2012 um 5:57 Uhr


Benutzer-Avatar
Jason McTaggart

Ich werfe es zuerst in ein Int

rotationAngle = (((int)rotationAngle) % 360);

wenn Sie mehr Genauigkeit wünschen

float t = rotationAngle-((int)rotationAngle);
rotationAngle = (((int)rotationAngle) % 360);
rotationAngle+=t;

  • Ich denke nicht, dass es genug ist, um sich Sorgen zu machen, es sei denn, Sie verwenden es, um eine Fahrtrichtung für ein Raumschiff einzugeben. Wenn es überhaupt etwas verliert, glaube ich nicht, dass es das tun wird, es gibt kein Runden, Gießen oder Teilen, also wird es nicht.

    – Jason McTaggart

    27. April 2012 um 14:03 Uhr


1187340cookie-checkMod-Operator in ios

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy