tree_fly 发表于 2015-1-26 14:42:22

把三角函数思想运用到画菱形中

本帖最后由 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): ");
            }
      }
    }






打印效果:





多多指点与交流。












冷月孤心 发表于 2015-1-26 16:19:29

只能膜拜,正在学习.老Z就是这个逻辑设计的.

飘云 发表于 2015-1-26 16:29:16

专家、数学家!

GeekCat 发表于 2015-1-26 18:52:29

大牛级啊!我的就是配了很久才配出一个菱形
学习了!!!

阳光宅男 发表于 2015-1-26 19:13:52

只能膜拜了

qinccckencn 发表于 2015-1-26 21:09:40

看来要学好编程那必须是数学中的高手才行,膜拜一下

lyl2012 发表于 2015-1-27 09:03:07

楼主分析问题思路敏捷,逻辑性强

wgz001 发表于 2015-1-27 11:20:28

楼主的数学真好分析的更好
再次验证了校长的话

sndncel 发表于 2015-1-27 18:44:59

这个代码我看得懂呀。。。。。{:soso_e113:}很多东西跟Java很像呀。。。。

crackfan 发表于 2015-1-28 14:18:11

标题错了吧~~怎么看都是c# 而不是c++
页: [1] 2
查看完整版本: 把三角函数思想运用到画菱形中