本文整理汇总了C#中Polygon.ToArray方法的典型用法代码示例。如果您正苦于以下问题:C# Polygon.ToArray方法的具体用法?C# Polygon.ToArray怎么用?C# Polygon.ToArray使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Polygon
的用法示例。
在下文中一共展示了Polygon.ToArray方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Intersect
/// <summary>
/// �ʑ��p�`�Ƌ�`�Ƃ̌���̈����߂�B��`�͐����ł��邱�ƁB
/// ����̈悪���݂��Ȃ����null�B
///
/// ��������ӎ����ăR�[�f�B���O���Ă���B
/// �ʑ��p�`���܂邲��Rect a�Ɏ��܂�Ȃ�A�ʑ��p�`�ł���b�̎Q�Ƃ����̂܂ܕԂ邱�Ƃ����B(�������̂���)
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static Point[] Intersect(Rect a, Point[] b)
{
int N = b.Length;
// ���݂̃J�����g�̓_�̓����W�O�ł��邩
bool isLastPointOut = false, isCurrentPointOut = false;
// �������Ő錾����͍̂s�V���������A����͖{�����������Ȃ��Ă����ϐ��Ȃ̂�
// unroll���Ă���Ƃ���ʼn��x����������ꂽ���Ȃ��B
// y = top�Őؒf
{
bool inRect = true; // ���ׂĂ���`��
bool outRect = true; // ���ׂĂ���`�O
float top = a.Top;
for (int i = 0; i < N; ++i)
{
outRect = outRect && (b[i].Y <= top);
inRect = inRect && (b[i].Y >= top);
}
if (outRect)
return null;
if (!inRect)
{
// �ʑ��p�`c �� y = top�Őؒf������̂�b�Ƃ���K�v������B
Polygon c = new Polygon();
// ���[�v�� 0��[1,N]�ɂ���A[1,N]�̋�Ԃ�(i-1)���ł��邱�Ƃ�ۏł���
for (int i = 0; i < N + 1; ++i)
{
isCurrentPointOut = b[i % N].Y < top;
if (i != 0)
{
if (isLastPointOut ^ isCurrentPointOut)
{
// �ӂ̗��[���̈��܂����̂Œ�����y=top�Ƃ̌�_��o��
Point p1 = b[(i - 1) % N];
Point p2 = b[i % N];
// t�EP1 + (1-t)�EP2 = { x , top }
// t(P1 - P2) + P2 = { x, top }
// �� t = (top - P2.Y)/(P1.Y - P2.Y)
float t = (top - p2.Y) / (p1.Y - p2.Y);
float x = t * p1.X + (1 - t) * p2.X;
c.Add(new Point(x, top));
}
if (!isCurrentPointOut)
{
// �ӂ̍���̒��_������̈�Ȃ̂�b[i]��o��
c.Add(b[i % N]);
}
}
isLastPointOut = isCurrentPointOut;
}
b = c.ToArray();
N = b.Length;
}
}
// y = bottom�Őؒf
{
bool inRect = true; // ���ׂĂ���`��
bool outRect = true; // ���ׂĂ���`�O
float bottom = a.Bottom;
for (int i = 0; i < N; ++i)
{
outRect = outRect && (b[i].Y >= bottom);
inRect = inRect && (b[i].Y <= bottom);
}
if (outRect)
return null;
if (!inRect)
{
// �ʑ��p�`c �� y = bottom�Őؒf������̂�b�Ƃ���K�v������B
Polygon c = new Polygon();
// ���[�v�� 0��[1,N]�ɂ���A[1,N]�̋�Ԃ�(i-1)���ł��邱�Ƃ�ۏł���
for (int i = 0; i < N + 1; ++i)
{
isCurrentPointOut = b[i % N].Y > bottom;
if (i != 0)
{
if (isLastPointOut ^ isCurrentPointOut)
{
// �ӂ̗��[���̈��܂����̂Œ�����y=bottom�Ƃ̌�_��o��
Point p1 = b[(i - 1) % N];
Point p2 = b[i % N];
//.........这里部分代码省略.........