[C#] AY.WPF-图形编程-高中生为起点-研究报告1
=========================www.ayjs.net独家拥有,未经许可,不许转载,违者追究法律责任
简单的引入:点的平移与转换
System.Window.Point类的 Offset方法
例如起始点10,30,offset(125,150)就变成135,180了
DEMO1:界面上个放个按钮和一个canvas
<Window x:Class="WpfApplication3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication3" mc:Ignorable="d" Title="AY绘图基础" Height="420" Width="600" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen"> <Grid> <Button x:Name="btnmove" Content="平移" Click="btnmove_Click" Width="80" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/> <Canvas x:Name="canvas" Width="400" Height="300" Background="FloralWhite"> </Canvas> </Grid> </Window>
后台在窗体初始化的时候,创建一个该两点的连线
Point p_start = new Point(150, 150); Point p_end = new Point(10, 30); Line l = new Line(); private void Window_Loaded(object sender, RoutedEventArgs e) { l.Stroke = Brushes.Black; l.StrokeThickness = 2; l.X1 = p_start.X; l.X2 = p_end.X; l.Y1 = p_start.Y; l.Y2 = p_end.Y; canvas.Children.Add(l); }
我们通过动画的方式迁移这个点
Storyboard sb = new Storyboard(); private void btnmove_Click(object sender, RoutedEventArgs e) {
p_end = new Point(10, 30);//重置 p_end.Offset(125, 150);//=>(135,180) var daX = new DoubleAnimation(p_end.X, new Duration(TimeSpan.FromMilliseconds(1000))); var daY = new DoubleAnimation(p_end.Y, new Duration(TimeSpan.FromMilliseconds(1000))); sb.Children.Add(daX); sb.Children.Add(daY); Storyboard.SetTarget(daX, l); Storyboard.SetTarget(daY, l); Storyboard.SetTargetProperty(daX, new PropertyPath(Line.X2Property)); Storyboard.SetTargetProperty(daY, new PropertyPath(Line.Y2Property)); sb.Begin(this); }
效果:
我们试试PointAnimationUsingKeyFrames,当然这里line没有point属性,所以不行,我们只能分开x2,y2同时动画了,不能point动画
对了,可能你听过 Cartesian coordinate system 笛卡尔坐标系
OpenGL中规则可能是这样的,而且还有其他坐标系,题外话不讲了
OpenGL使用右手坐标
从左到右,x递增
从下到上,y递增
从远到近,z递增
当然这里我还要介绍一个 Polar coordinate system 极坐标系
这个知识,一般高中学理科的都学过,没记错应该是 选修4-4 坐标系与参数方程
这个概念在做扇形图很重要,定义:
在平面内取一个定点O,叫做极点,自极点O引一条射线叫Ox,叫做极轴,再选一个单位长度,一个角度(通常取弧度)及其正方向(通常逆时针方向),这样就建立了一个极坐标系
设M是平面内任意一点,极点O与点M的距离 |OM|叫做点M的极径,叫做ρ;以极轴Ox为始边,射线OM为终边的叫xOM叫做点M的极角,叫做θ,有序数对(ρ,θ)叫做点M的极坐标
这里的r相当于极径ρ,所以这里关于极坐标和 直角坐标系的转换
r的另一端的坐标就等于 (x,y)=(r cosψ,r sinψ)
所以推导出另外两个公式 p平方=x平方+y平方,tanθ=y/x
(这两个公式过会我们有用)
常用坐标计算
两点间的距离A(x1,y1) B(x2,y2) :根号下( (x2-x1)的平方+(y2-y1)的平方)
原点O距离 根号下(x的平方+y的平方)
中点坐标都是 (二分之(x1+x2),二分之(y1+y2) )
两点间的距离A(x1,y1,z1) B(x2,y2,z2) :根号下( (x1-x2)的平方+(y1-y2)的平方+(z1-z2)的平方)
原点O距离 根号下(x的平方+y的平方+z的平方)
中点坐标都是 (二分之(x1+x2),二分之(y1+y2),二分之(z1+z2))
======================================== AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢===============
弧长,弧度
在数学和物理中,弧度是角的度量单位。它是由国际单位制导出的单位,单位缩写是rad。
定义:弧长等于半径的弧,其所对的圆心角为1弧度。(即两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1)。
初中时候:弧长=nπr/180,在这里n就是角度数,即圆心角n所对应的弧长
特殊弧长,也就是弧度除以180后乘以π
根据定义,一周的弧度数为2πr/r=2π,360°角=2π弧度,因此,1弧度约为57.3°,即57°17'44.806'',1°为π/180弧度,近似值为0.01745弧度,周角为2π弧度,平角(即180°角)为π弧度,直角为π/2弧度。
方差越小,数据就越集中在平均数附近,方差越大,这组数据大部分都偏离平均数。
标准差大,说明这组数据离散程度大,越小,说明离散程度小。
======================================== AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢===============