Цель C - Создание углов из текущего времени - PullRequest
2 голосов
/ 30 сентября 2011

Я пытаюсь написать код для рисования часов на экране устройства iOS.Мне нужно получить угол линии (секунды, минуты, часы стрелки часов) от текущего времени.Мой код точно захватывает время, но по какой-то причине все углы, которые я получаю, оказываются одинаковыми (независимо от того, который час).

Если это помогает, угол, который я постоянно получаю, равен:

-1.5707963267948966

Вот код, который я использую для получения углов:

secondsTheta = ((seconds/60) * (2 * M_PI)) - (M_PI / 2);
minutesTheta = ((minutes/60) + (seconds/3600)) * (2 * M_PI) - (M_PI / 2);
hoursTheta = ((hours/12) + (minutes/720) + (seconds/43200)) * (2 * M_PI) - (M_PI / 2);

Я думаю, что с M_PI что-то смешное, но я не знаю, что будет ... но, как я уже сказал, переменные секунд, минут и часов верны.Они объявлены в моем заголовочном файле как ints , и я знаю, что [NSDateComponents seconds] (и т. Д.) Возвращает NSInteger, но я не думаю, что это должно иметь значение для этой базовой математики.

Ответы [ 2 ]

7 голосов
/ 30 сентября 2011

Поскольку переменные секунд, минут и часов объявлены как целые, деление не даст вам правильных значений. Int, деленное на другую init, приведет к int, для результата необходим float. Чтобы компилятор использовал арифметику с плавающей запятой, необходимо, чтобы один из операндов был числом формата с плавающей запятой (float).

Пример: 10 секунд, деленные на 60 (10/60), будут использовать целочисленную математику и приведут к 0.
Пример: 10,0 секунд, разделенных на 60 (10/60), будут использовать математику с плавающей запятой и результат 0,1,66666667.

Пример:

secondsTheta = ((seconds/60.0) * (2 * M_PI)) - (M_PI / 2);

или

secondsTheta = (((float)seconds/60) * (2 * M_PI)) - (M_PI / 2);
4 голосов
/ 30 сентября 2011

Ваши секунды, минуты и часы - целые.Разделение целых чисел на целые дает целочисленную арифметику и усекает значения, поэтому

seconds/60

всегда даст вам 0. Objective C наследует это поведение от C , и это довольно распространенное поведение среди языков программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...