一,1道几何题

已知两点坐标确定一条直线,直线上存在一个未知点,起始点与未知点的距离已知

求:未知点坐标

思路,如下:

求AB长度,可以根据两点距离公式

二,写个C#

定义一个Point类,代表坐标,它有两个成员x和y

定义一个方法GetLength,获取两点距离

       /*
有两点坐标a(1,24) b(35,58) 连成一条直线,现在ab连线有一点p,pa长度为12
求:p点的坐标
*/
class Point
{
public double x;
public double y;
public Point(int x,int y)
{
this.x=x;
this.y=y;
}
public static double GetLength(Point a,Point b)
{
return Math.Sqrt(Math.Pow(a.x - b.x, ) + Math.Pow(a.y - b.y, ));
}
} private Point GetPoint(Point a, Point b, double otherLength)
{
Point p = new Point(, ); p.x = otherLength * (b.x - a.x) / Point.GetLength(a, b) + a.x;
p.y = otherLength * (b.y - a.y) / Point.GetLength(a, b) + a.y; return p;
} //测试方法
static void main()
{
double otherLength = ;
double radius = ; //a:起点 b:终点 p:a,b之间任意一点
Point a1 = new Point(, );
Point b1 = new Point(, );
}

三,绘制一个扇形

思路:使用PathGeometry中的LinearSegment和ArcSegment来绘制

(1)     确定两点坐标,绘制一条直线

(2)     已知半径长度,得到圆心坐标

(3)     按任意偏角绘制一条弧形

这个任意偏角,是个重点问题:

(1),  另一边在弧上坐标

(2),  如何把这个弧度做成依赖属性配置的

xaml代码:

       <Path x:Name="PathFillColor" Fill="Green" Canvas.Top="100" Canvas.Left="100" Stroke="Black" StrokeThickness="2">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="1,24" IsClosed="True">
<LineSegment Point="9.48528137423857,32.4852813742386"/>
<ArcSegment Size="80,80" Point="59,13" SweepDirection="Clockwise"/>
<LineSegment Point="59,1"/>
<ArcSegment Size="80,80" Point="1,24" SweepDirection="Counterclockwise"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>

效果图

四,绘制环形

思路:

上图由8个扇形组成,即每个扇形偏角45度

可以用8个按钮代替

那么:

将按钮做成控件模板,内容就是一个扇形

则8个按钮使用这个控件模板

再对每个按钮进行45度旋转(使用RotateTransform实现)

定义控件模板

<UserControl.Resources>
<Style x:Key="CircleStyle1" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Canvas>
<Canvas>
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="RenderScaleX" />
<RotateTransform/>
</TransformGroup>
</Canvas.RenderTransform>
<Path x:Name="PathFillColor" Fill="{TemplateBinding Button.Background}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="1,24" IsClosed="True">
<!--
<LineSegment Point="35,58"/>
<ArcSegment Size="30,30" Point="59,48" SweepDirection="Clockwise"/>
<LineSegment Point="59,1"/>
<ArcSegment Size="80,80" Point="1,24" SweepDirection="Counterclockwise"/>
-->
<LineSegment Point="9.48528137423857,32.4852813742386"/>
<ArcSegment Size="80,80" Point="59,13" SweepDirection="Clockwise"/>
<LineSegment Point="59,1"/>
<ArcSegment Size="80,80" Point="1,24" SweepDirection="Counterclockwise"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock Foreground="Black" Text="{TemplateBinding Button.Content}" Canvas.Left="20" Canvas.Top="20">
<TextBlock.RenderTransform>
<RotateTransform Angle="-25"/>
</TextBlock.RenderTransform>
</TextBlock>
</Canvas>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> </UserControl.Resources>

使用样式

<Button x:Name="btn1" Background="#0024CE" Height="60" Width="60" Margin="42,18,0,0" Canvas.Top="0" Canvas.Left="0" RenderTransformOrigin="0.97,1.4" Content="1" Style="{StaticResource CircleStyle1}">
<Button.RenderTransform>
<TransformGroup>
<RotateTransform/>
</TransformGroup>
</Button.RenderTransform>
</Button> <Button x:Name="btn2" Background="#00ace7" Height="60" Width="60" Margin="42,18,0,0" Canvas.Top="0" Canvas.Left="0" RenderTransformOrigin="0.97,1.4" Content="2" Style="{StaticResource CircleStyle1}">
<Button.RenderTransform>
<TransformGroup>
<RotateTransform Angle="45"/>
</TransformGroup>
</Button.RenderTransform>
</Button> <Button x:Name="btn3" Background="#9dff00" Height="60" Width="60" Margin="42,18,0,0" Canvas.Top="0" Canvas.Left="0" RenderTransformOrigin="0.97,1.4" Content="3" Style="{StaticResource CircleStyle1}">
<Button.RenderTransform>
<TransformGroup>
<RotateTransform Angle="90"/>
</TransformGroup>
</Button.RenderTransform>
</Button>

未解决:

1,任意偏角,是个重点问题:

(1),  另一边在弧上坐标

(2),  这个弧的弧度(ArcSegment中的Size或Angle属性)

(3),  如何把这个弧度做成依赖属性配置的

2,做成一个自定义控件

有时间,再完成

准备知识:

1,  平面几何思维(三角形,圆,弧,曲线,斜率,方程式)

2,  三次贝塞尔曲线的数学公式

3,  定时器与动画的区别是时间序列

4,  缓动动画

Sliverlight实例之 绘制扇形和环形图的更多相关文章

  1. 数据输入——生成你需要的echart图(堆积柱状图、扇形图、嵌套环形图)

    最近论文需要一些比较直观的图表, 发现echart做出来的图还是比较美观的,这里介绍如何修改数据生成你需要的echart图. 1.堆积柱状图: http://echarts.baidu.com/exa ...

  2. Unity3D之Mesh(六)绘制扇形、扇面、环形

    前言: 绘制了圆,就想到绘制与之相关的几何图形,以便更灵活的掌握Mesh动态创建模型的机制与方法. 一.分析: 首先,结合绘制圆的过程绘制环形: 圆形是由segments个等腰三角形组成的(上一篇中, ...

  3. MATLAB实例:绘制折线图

    MATLAB实例:绘制折线图 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 条形图的绘制见:MATLAB实例:绘制条形图 用MATLAB将几组不同的数 ...

  4. [ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)

    package { import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; / ...

  5. 绘制扇形效果线条小Bug解决

    绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标, ...

  6. 使用canvas编写环形图.

    原理使用canvas画图: 第一步:画一个大圆 第二部:画一个扇形 第三部:画一个小圆 相互叠加. 最终效果: 现在上代码: (function($){ $.fn.drawPic=function(o ...

  7. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  8. IOS-使用CAShapLayer绘制扇形

    IOS-使用CAShapLayer绘制扇形 为了增加应用体验感,我们动态绘制扇形或者饼状图效果. 这里我们使用CAShapeLayer,这样就不必再-(void)draw函数内绘制图形 参考代码 -( ...

  9. html5--5-9 绘制扇形

    html5--5-9 绘制扇形 学习要点 综合运用已经学过的知识绘制一个扇形 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y,w,h) 绘制矩形(无 ...

随机推荐

  1. IP分类地址——a,b,c 类是如何划分的

    今天IP网络使用32位地址,点分十进制格式,如172.16.0.0.地址格式:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址. IP地址类型 当互联网最初的设计,为了便于网络 ...

  2. 《转载》值得学习!Google的编程样式指南

    原网址:http://www.csdn.net/article/2012-10-12/2810689-Google-styleguide 本文分享了Google众多编程语言的样式指南,其中包括C语言. ...

  3. [Windows Phone]模仿魔兽3技能按钮SkillButton

    简介: 模仿魔兽3技能按钮,带CD效果.使用的时候可以当做普通按钮使用,同时也支持Binding. 音效紧耦合在控件内部,因为控件本身目的就是模拟魔兽3的技能按钮,所以不考虑音效的扩展. Demo结构 ...

  4. 图片本地预览 flash html5

    dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...

  5. 2014辽宁省赛 Repeat Number

    问题 C: Repeat Number 时间限制: 1 Sec  内存限制: 128 MB [cid=1073&pid=2&langmask=0">提交][状态][论坛 ...

  6. MVC应用程序与多选列表(checkbox list)

    原文:MVC应用程序与多选列表(checkbox list) 程序中,经常会使用checkbox lsit来呈现数.能让用户有多选项目.此博文Insus.NET练习的checkbox list相关各个 ...

  7. 百度词典搜索_dress code

    百度词典搜索_dress code dress code n.着装标准

  8. SimpleDateFormat 的线程安全问题与解决方式

    SimpleDateFormat 的线程安全问题 SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的详细类. 它同意格式化 (date -> text).语法分析 (te ...

  9. poj3613(恰经过N条边的最短路)

    题目连接:http://poj.org/problem?id=3613 题意:从S 到 T 经过边得个数恰为k的最短路是多少. 分析:01邻接矩阵A的K次方C=A^K,C[i][j]表示i点到j点正好 ...

  10. 【转】Vim学习资料

    初学资料:1:一个介绍VIM操作的游戏,十分适合初学者.只是:不要怕英文.vim-adventures.com2:http://blog.csdn.net/niushuai666/article/de ...