2012-04-27 6 views
18

đã tìm kiếm toán tử mod trong ios, giống như % trong c, nhưng không có may mắn khi tìm kiếm nó. Đã thử câu trả lời trong số link nhưng câu trả lời này cho cùng một lỗi. Tôi có một biến nổi 'rotationAngle' có góc tiếp tục tăng hoặc giảm dựa trên chuyển động của ngón tay người dùng. Một số điều như thế này:Toán tử điều hành trong ios

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

Tôi chỉ cần phải chắc chắn rằng rotationAngle doesnot qua +/- 360 giới hạn. Bất kỳ trợ giúp nào về cơ thể. Cảm ơn

+3

Eh, Mục tiêu-C mở rộng từ C. Vì vậy, toán tử '%' của C cũng hoạt động trong Mục tiêu-C. ** Tuy nhiên ** float không thể làm '%' vì vậy bạn cần phải làm cho nó một int đầu tiên. –

Trả lời

40

Bạn có thể sử dụng fmod (ví double) và fmodf (ví float) của toán học. h:

#import <math.h> 

rotationAngle = fmodf(rotationAngle, 360.0f); 
+1

Cảm ơn u nhưng nó làm việc mà không cần nhập math.h cũng rất ngắn và chính xác. – nuteron

1

tôi bỏ nó vào một int đầu tiên

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

nếu bạn muốn chính xác hơn sử dụng

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

Điều này, tất nhiên, sẽ mất ít nhất một số độ chính xác. –

+0

Tôi không nghĩ rằng nó đủ để lo lắng, trừ khi bạn đang sử dụng nó để nhập một hướng đi cho một tàu vũ trụ. Nếu nó bị mất bất kỳ phù thủy nào, tôi không nghĩ nó sẽ làm như vậy, không có làm tròn, đúc, hoặc cắt rời để nó không xảy ra. –

12

Sử dụng chức năng fmod, thực hiện một điểm mô-đun nổi, để định nghĩa, xem tại đây: http://www.cplusplus.com/reference/clibrary/cmath/fmod/. Ví dụ về cách thức hoạt động (với các giá trị trở về):

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 mất "phao" như các đối số, fmod mất "kép" và fmodl mất "đôi dài", nhưng tất cả đều làm điều tương tự.

+0

Cảm ơn câu trả lời của bạn tác phẩm này, mục tiêu c rất đa dạng, một khi bạn gọi một phương thức như [methodName tự: tham số], dòng tiếp theo bạn gọi một phương thức như methodName (tham số) .. – nuteron