zoukankan      html  css  js  c++  java
  • [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         杨洋原创编写,请不要转载谢谢===============

  • 相关阅读:
    Window frames[]集合(转)
    ObjectDataSource 如何传递查询参数
    前台如何解析json格式 以及后台如何生成json格式
    Burrows–Wheeler transform
    windows xp中安装PadWalker
    ORA01207:文件比控制文件更新 旧的控制文件
    如何看懂NCBI BLAST输出结果
    Perl getopts
    blast formatdb 使用方法介绍
    Randfold安装
  • 原文地址:https://www.cnblogs.com/AaronYang/p/4729590.html
Copyright © 2011-2022 走看看