把三角函数思想运用到画菱形中
本帖最后由 tree_fly 于 2015-1-26 14:42 编辑大伙讨论菱形蛮激烈,也来凑个热闹~{:soso_e100:}
当然画菱形的方法真的很多,手痒痒了今天动手写了一段代码,望各位多多指点。
1.如何判断一个坐标点是否在如下圆内?
答案很简单,只要算出黄色坐标点到圆心的距离,和圆点半径比较即可。
2.当我们面对一个菱形呢?
我们假设坐标(0,0)位于菱形的最左顶点。
有人会说,这个坐标是1:1关系的,是个正方形。这个很好理解,纵横坐标比值>1,菱形显得上下修长一些,反之左右修长一些,这些不影响我们分析。这里假设纵横坐标比例1:1。
问题:如何判断黄色坐标点位于上图的菱形内呢?
相信大家应该很容易理解,同时满足:
1.坐标点P(Px,Py)与(0,0)点连线与x轴夹角α小于等于45度。
2.坐标点P(Px,Py)与(10,0)点连线与x轴夹角β小于等于45度。
事实上,tanα= Py/Px, tanβ= Py/(10-Px), tan45°=1
处理x轴以下坐标点时候需要取绝对值了,大家自然明白。
所以问题变成了:abs <=1, abs <=1
3.思路就是这样,下面用代码来实现试试。
示例源码:C#。
class Program
{
static void Main(string[] args)
{
//1.Input
Console.Write("Please Input Number n (zero exit): ");
int n;
while ((n = int.Parse(Console.ReadLine())) > 0)
{
//2.Draw
double x, y;
for (y = n - 1; y >= 0; y--)
{
for (x = 0; x <= n - 1; x++)
{
//2.1 预处理除数为0问题
if (x == 0 | x == n - 1)
{
if (y == (n - 1) / 2) Console.Write("*");
else Console.Write(" ");
continue;
}
int t = 1;
switch (t)
{
case 1://打印实心菱形
if ((Math.Abs((y - (n - 1) / 2) / x) <= 1) &
(Math.Abs((y - (n - 1) / 2) / (n - x - 1)) <= 1))
Console.Write("*");
else Console.Write(" ");
break;
case 2://空心菱形
if ((Math.Abs((y - (n - 1) / 2) / x) == 1) |
(Math.Abs((y - (n - 1) / 2) / (n - x - 1)) == 1))
Console.Write("*");
else Console.Write(" ");
break;
}
}
//WriteLine
Console.WriteLine();
}
Console.Write("Please Input Number n (zero exit): ");
}
}
}
打印效果:
多多指点与交流。
只能膜拜,正在学习.老Z就是这个逻辑设计的. 专家、数学家! 大牛级啊!我的就是配了很久才配出一个菱形
学习了!!! 只能膜拜了 看来要学好编程那必须是数学中的高手才行,膜拜一下 楼主分析问题思路敏捷,逻辑性强 楼主的数学真好分析的更好
再次验证了校长的话 这个代码我看得懂呀。。。。。{:soso_e113:}很多东西跟Java很像呀。。。。 标题错了吧~~怎么看都是c# 而不是c++
页:
[1]
2