All the controls missing in WPF. Over 1 million downloads.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.3 KiB

/*************************************************************************************
Extended WPF Toolkit
Copyright (C) 2007-2013 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
pick up the Plus Edition at http://xceed.com/wpf_toolkit
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
***********************************************************************************/
using System;
using System.Windows;
namespace Xceed.Wpf.Toolkit.Core.Utilities
{
internal static class EllipseHelper
{
public static Point PointOfRadialIntersection( Rect ellipseRect, double angle )
{
// given by the formula:
//
// x = a cos q,
// y = b sin q,
//
// where a is the elliptical radius along the major axis
// b is the elliptical radius along the minor axis
// q is the central angle from the major axis
double a = ellipseRect.Width / 2;
double b = ellipseRect.Height / 2;
// since this is WPF, we can assume angle is currently specified in degrees, so convert to radians
double q = angle * Math.PI / 180;
return RectHelper.Center( ellipseRect ) + new Vector( a * Math.Cos( q ), b * Math.Sin( q ) );
}
public static double RadialDistanceFromCenter( Rect ellipseRect, double angle )
{
// given by the formula:
//
// 2 2
// 2 a b
// r = -----------------
// 2 2 2 2
// a sin q + b cos q
//
// where a is the elliptical radius along the major axis
// b is the elliptical radius along the minor axis
// q is the central angle from the major axis
double a = ellipseRect.Width / 2;
double b = ellipseRect.Height / 2;
// since this is WPF, we can assume angle is currently specified in degrees, so convert to radians
double q = angle * Math.PI / 180;
double sinq = Math.Sin( q );
double cosq = Math.Cos( q );
return Math.Sqrt( ( a * a * b * b ) / ( ( a * a * sinq * sinq ) + ( b * b * cosq * cosq ) ) );
}
}
}