计算顶部三角形坐标方法:

  1. /// <summary>
  2. /// 获取顶三角形坐标
  3. /// </summary>
  4. /// <param name="r">外接圆半径(顶点到中心的距离)</param>
  5. /// <param name="n">N角星</param>
  6. /// <param name="x1">左横坐标</param>
  7. /// <param name="y1">纵坐标</param>
  8. /// <param name="x2">又横坐标</param>
  9. private void GetCoordinate(double r, int n, out double x1, out double y1, out double x2)
  10. {
  11. double unitAngle = ;
  12. if(n < )
  13. {
  14. //奇数角星锐角30,偶数角星锐角和为45
  15. unitAngle = n % == ? : ;
  16. }
  17. else
  18. {
  19. //奇数角星锐角和为180,偶数角星锐角和为360
  20. unitAngle = n % == ? / n : / n;
  21. }
  22. double l = Math.PI / ; //弧度单位
  23. double a = Math.Sin( / ( * n) * l), //多角芒星各角连中心分割所得的夹角的一半
  24. b = Math.Sin(unitAngle/ * l), //芒星内角锐角的一半
  25. c = Math.Sin(( - / ( * n) - unitAngle/) * l), //芒星除了内锐角的其他内角与中心点连线的夹角
  26. d = Math.Cos(( / ( * n)) * l);
  27. x1 = (a * r * b) / c; //正弦定理
  28. y1 = (d * r * b) / c;
  29. x2 = r - x1; //x2与x1关于中心点垂线对称,右移r个长度
  30. x1 += r; //右移r个长度
  31. y1 -= r; //下移r个长度
  32. //取正数
  33. x1 = x1 < ? x1 * (-) : x1;
  34. y1 = y1 < ? y1 * (-) : y1;
  35. x2 = x2 < ? x2 * (-) : x2;
  36. }

1、画空心正N角星

思路:通过计算得到顶部一个三角形的坐标,画出三角形,再画出三角形顺时针旋转一周的其他N-1个三角形。组合起来得到一个伪的多角芒星。

  1. /// <summary>
  2. /// 画多角芒星,正多角星
  3. /// </summary>
  4. /// <param name="r">外接圆半径</param>
  5. /// <param name="n">角数量</param>
  6. /// <returns>返回包含正多角星的Canvas</returns>
  7. private Canvas DrawingPentacle(double r, int n)
  8. {
  9. double x1, x2, y1;
  10. GetCoordinate(r, n, out x1, out y1, out x2);
  11. Canvas canvas = new Canvas() { Width = , Height = };
  12. //重复N次画出N个三角形斜边
  13. for (int i = ; i <= n; i++)
  14. {
  15. DrawingVisual dv = new DrawingVisual();
  16. using (DrawingContext dc = dv.RenderOpen())
  17. {
  18. dc.DrawGeometry(Brushes.LightBlue, new Pen(Brushes.BlueViolet, ), Geometry.Parse(string.Format("M {0},0 L{1},{2} M 50,0 L{3},{2}", r, x1, y1, x2)));
  19. }
  20. //顺时针旋转
  21. dv.Transform = new RotateTransform(i * / n, , );
  22.  
  23. //作为图片资源放到图片控件中
  24. RenderTargetBitmap rtb = new RenderTargetBitmap(, , , , PixelFormats.Default);
  25. rtb.Render(dv);
  26. Image image = new Image() { Source = rtb };
  27. canvas.Children.Add(image);
  28. }
  29. return canvas;
  30. }

WPF画N角芒星,正N角星的更多相关文章

  1. CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆圈,八卦

    转自:http://blog.csdn.net/chenhongwu666/article/details/38905803 CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆 ...

  2. WPF画箭头

    简介 参考Using WPF to Visualize a Graph with Circular Dependencies的基础上写了一个WPF画箭头的库. 效果图如下: 使用的XAML代码如下: ...

  3. WPF 画线动画效果实现

    原文:WPF 画线动画效果实现 弄了将近三天才搞定的,真是艰辛的实现. 看了很多博客,都太高深了,而且想要实现的功能都太强大了,结果基础部分一直实现不了,郁闷啊~ 千辛万苦终于找到了一个Demo,打开 ...

  4. OpenCV-Python:Harris角点检测与Shi-Tomasi角点检测

    一.Harris角点检测 原理: 角点特性:向任何方向移动变换都很大. Chris_Harris 和 Mike_Stephens 早在 1988 年的文章<A CombinedCorner an ...

  5. 【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测

    角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(k ...

  6. 角点检测:Harris角点及Shi-Tomasi角点检测

    角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(k ...

  7. c# 半角转换为全角 判断是否是全角

    #region 半角转换为全角 /// <summary> /// 半角转换为全角 ////转全角的函数(SBC case) ///任意字符串 ///全角空格为12288,半角空格为32 ...

  8. 提供对字符串的全角->半角,半角->全角转换

    package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...

  9. WPF画线问题,几千条以后就有明显的延迟了。

      我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() {    _path.Data = ...

随机推荐

  1. sql中关于case when的一个例子

    SELECT rownum R, a.expert_id as USERID, a.expert_id as TYPE, b.type_desc as TYPE_DESC, a.sex as SEX, ...

  2. c语言用封装来优化程序

    一.基础研究 先对函数fa进行研究,代码如下: fa函数的参数为一个字符指针,他存储要输出的字符串.因为要显示在屏幕的中央位置,所以我们要把字符串放在段地址b800处.用strlen获取字符串的长度, ...

  3. h.264 Mode Decision

    Mode Decision(模式选择)决定一个宏块以何种类型进行分割.宏块的分割类型有以下几种: //P_Skip and B_Skip means that nothing need to be e ...

  4. zznu 1255 数字统计(数位DP, 数学方法)

    最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec  内存 ...

  5. VisualSVN Server仓库迁移到Linux(包含所有版本, 权限,用户信息)

    公司开发服务器从Windows换成CentOS,所以要把原服务都转移到Linux下,MySQL.SMB的迁移都很顺利,但是SVN的转移却遇到了些问题,花费了三天时间,走了不少弯路,现在总算解决了SVN ...

  6. C#编译时出现“不安全代码只会在使用 /unsafe 编译的情况下出现”错误的解决

    原因是:在编译的代码里面有不安全类型unsafe方法或类!解决方法:将项目属性页中生成下的“允许不安全代码”复选框打上对勾即可,方法如下:项目属性对话框->生成->允许不安全代码块 选中即 ...

  7. Visual Studio创建跨平台移动应用_03.AppBuilder Extension

    1 背景 本章节是关于Telerik AppBuilder for Visual Studio的. 目前(2014.12)为Telerik公司Telerik Platform的一部分,Telerik ...

  8. banana pro 板子

    http://www.lemaker.org/cn/article-23-1.html

  9. C#中枚举类型和int类型的转化

    先定义一个枚举类型 , 初中, 高中,大学 }; int ->enum int d=2; PropertyType  a=(PropertyType)d; int <- enum Prop ...

  10. 数据库安全之TDE列加密

    透明数据加密(Transparent Data Encryption) TDE - 基于列的加密 由于有了Oracle的TDE-基于列的加密,你所要做的只是定义需要加密的列,Oracle将为包含加密列 ...