Я сейчас читаю Функциональное программирование в реальном мире: с примерами в F # и C# от Tomas Petricek и Jon Skeet. Я немного озадачен конкретным примером, в котором мы создаем приложение, которое отображает круговую диаграмму с некоторой статистикой популяций вместе с метками.F # разъяснение при создании меток для круговой диаграммы
Теперь это часть рисования метки или, скорее, установка координат ярлыка, который меня смущает. Я надеюсь, что автор не против, что я прикладываю выдержку здесь, но было бы сложно получить разъяснения по коду, не показывая его.
let centerX, centerY = 300.0, 200.0
let labelDistance = 150.0
let drawLabel (gr: Graphics) title startAngle angle =
let lblAngle = float(startAngle + angle/2)
let ra = Math.PI * 2.0 * lblAngle/360.0
let x = centerX + labelDistance * cos(ra)
let y = centerY + labelDistance * sin(ra)
let size = gr.MeasureString(title, fnt)
let rc = new PointF(float32(x) - size.Width/2.0f,
float32(y) - size.Height/2.0f)
gr.DrawString(title, fnt, Brushes.Black, new RectangleF(rc, size))
кажется, что labelDistance
и centerX, centerY
определяют некоторый стандарт «смещение» от центра поверхности рисунка, и я предполагаю, что тригонометрические функции определяют угол метки, потому что если я опускаю те, то все метки помещенный поверх каждого другого в нижнем правом углу. Но я не совсем понимаю , как это работает. Что именно здесь происходит?
Благодаря кучу, это было очень хорошее объяснение! –