Ответ: Проблема в освении))
видимо 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));
__________________
|