Показать сообщение отдельно
Старый 27.11.2009, 11:50   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблема в освении))

видимо X и Y типа float у тебя.
C# считает ошибкой даунгрейд типов, т.е. когда double (8байт) присваивается к переменной типа float(4байт), то точность данных падает. Есть два пути:
* сделать все участвующие переменные типа double
* сделать каст (насильное привидение типов)

X = (float)Math.Round(x0 + R * Math.Asin(a)); // при условии что x0, y0 и R типа double
Y = (float)Math.Round(y0 + R * Math.Acos(a));

А ещё можно даунгрейднуть значения косинуса:
X = Math.Round(x0 + R * (float)Math.Asin(a));
Y = Math.Round(y0 + R * (float)Math.Acos(a));
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
shpak (27.11.2009)