csharp高级练习题:多边形方向【难度:4级】:
问题
你的任务很简单:找出给定的多边形具有顺时针或逆时针定位.
分将被表示为{X:X,Y:Y}笛卡尔坐标.
多边形将其在多边形的顶点点的数组.在数组矩阵连接最后一个点返回到第一点.
如果多边形的方向为顺时针,否则为假的函数将返回true.
你可以假设:
1.多边形* * 将是一个有效的多边形.也就是说,它至少有三个点,正好有两个边缘将在每个顶点见面.
2.在试验中,点永远不会正好落在多边形的边缘.
测试
为了帮助您可视化的测试案例,有预装的方法绘制多边形:
showAndTest(聚,定向)//这也自动调用Test.expect
Kata.PolyOrientation(聚)
所以,如果你拨打:
showAndTest([{X:0,Y:5},{X:5,Y:-5},{X:-5,Y:-5}],TRUE);
聚=新列表<的PointF> {
新的PointF(0,5),
新的PointF(5,-5),
新的PointF(-5,-5)
};
Console.WriteLine(KataTestHelper.DrawTest(聚,真));
然后你会看到:
<多边形点= “100.5,50.5 150.5,150.5 50.5,150.5” 行程= “蓝色” 填充= “蓝色” 填充不透明度= “0.08”> </多边形>
<克字体大小=“12"字体=“无衬线"填充=“黑"行程=“无”>
<文本X = “100.5” Y = “50.5” DY = " - 5” DX = “5”> A(0,5)</文本>
<文本X = “150.5” Y = “150.5” DY = " - 5” DX = “5”> B(5,-5)</文本>
<文本X = “50.5” Y = “150.5” DY = " - 5” DX = “5”> C(-5,-5)</文本>
<文本X = “100.5” Y = “100.5” DY = " - 5" DX = “5”> 0 </文本>
<文本X = “184.5” Y = “100.5” DY = " - 5" DX = “5”> X </文本>
<文本X = “100.5” Y = “14.5” DY = " - 5" DX = “5”>ý</文本>
的
<圆CX = “100.5” CY = “100.5” R = “2” 填充= “红色”> </圈>
<线X1 = “5.5” Y1 = “100.5” X2 = “184.5” Y2 = “100.5” 标记结束= “URL(#triangle)” 行程= “红色” 笔划宽度= “1”> </线>
<线X1 = “100.5” Y1 = “194.5” X2 = “100.5” Y2 = “14.5” 标记结束= “URL(#triangle)” 行程= “红色” 笔划宽度= “1”> </线>
<标记ID = “三角形” 视框= “0 0 10 10” REFX = “0” REFY = “5” markerUnits = “strokeWidth” markerWidth = “10” markerHeight = “30” 东方= “自动”>
<路径d = “M 0 0 L - 10 5 L 0 10 Z”> </路径>
</标记"
<路径d ="M18,4l-4-4v2C6.281,2,0,8.281,0,16c0,3.746,1.461,7.266,4.117,9.914l2.82-2.832 C5.047,21.191,4,18.676,4 ,16C4,10.484,8.484,6,14,6v2L18,4z"的风格= "填充:#4E4E50;"变换= “翻译(170 5)”/>
的方向:顺时针</跨度>
如果你拨打:
showAndTest([{X:-5,Y:5},{X:-5,Y:-5},{X:5,Y:-5},{X:5,Y:5}],假) ;
聚=新列表<的PointF> {
新的PointF(-5,5),
新的PointF(-5,-5),
新的PointF(5,-5),
新的PointF(5,5)
};
Console.WriteLine(KataTestHelper.DrawTest(聚,假));
然后你会看到:
<多边形点=" 50.5,50.5 50.5,150.5 150.5,150.5 150.5,50.5" 行程= “蓝色” 填充= “蓝色” 填充不透明度= “0.08”> </多边形>
<克字体大小=“12"字体=“无衬线"填充=“黑"行程=“无”>
<文本X = “50.5” Y = “50.5” DY = " - 5” DX = “5”> A(-5,5)</文本>
<文本X = “50.5” Y = “150.5” DY = " - 5” DX = “5”> B(-5,-5)</文本>
<文本X = “150.5” Y = “150.5” DY = " - 5” DX = “5”> C(5,-5)</文本>
<文本X = “150.5” Y = “50.5” DY = " - 5" DX = “5”> d(5,5)</文本>
<文本X = “100.5” Y = “100.5” DY = " - 5" DX = “5”> 0 </文本>
<文本X = “184.5” Y = “100.5” DY = " - 5" DX = “5”> X </文本>
<文本X = “100.5” Y = “14.5” DY = " - 5" DX = “5”>ý</文本>
的
<圆CX = “100.5” CY = “100.5” R = “2” 填充= “红色”> </圈>
<线X1 = “5.5” Y1 = “100.5” X2 = “184.5” Y2 = “100.5” 标记结束= “URL(#triangle)” 行程= “红色” 笔划宽度= “1”> </线>
<线X1 = “100.5” Y1 = “194.5” X2 = “100.5” Y2 = “14.5” 标记结束= “URL(#triangle)” 行程= “红色” 笔划宽度= “1”> </线>
<标记ID = “三角形” 视框= “0 0 10 10” REFX = “0” REFY = “5” markerUnits = “strokeWidth” markerWidth = “10” markerHeight = “30” 东方= “自动”>
<路径d = “M 0 0 L - 10 5 L 0 10 Z”> </路径>
</标记"
<路径d ="M18,4l-4-4v2C6.281,2,0,8.281,0,16c0,3.746,1.461,7.266,4.117,9.914l2.82-2.832 C5.047,21.191,4,18.676,4 ,16C4,10.484,8.484,6,14,6v2L18,4z"的风格= "填充:#4E4E50;"变换= “翻译(190,5)规模(-1,1)”/>
的定位:逆时针</跨度>
附图窗口是20×20个单位宽和以原点为中心.
积分
由于osuushi,用于输出安排想法.
编程目标:
using System.Collections.Generic;
using System.Drawing;
public static class Kata
{
public static bool PolyOrientation(List Poly)
{
// do your magic
return true;
}
}
测试样例:
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Drawing;
[TestFixture]
public class PolyOrientationTest
{
[Test]
public void BasicTests()
new PointF(0, 5),
new PointF(5, -5),
new PointF(-5, -5)
};
Console.WriteLine(KataTestHelper.DrawTest(poly, true));
var orientation = Kata.PolyOrientation(poly);
Assert.AreEqual(true, orientation);
最佳答案(多种解法):
更多关联题目:
csharp高级练习题:让我们玩飞镖!【难度:3级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练
csharp基础练习题:藏头诗的读者【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练
免责申明
本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/polygon-orientation