WPF太阳、地球、月球运动轨迹模拟

简介: 原文:WPF太阳、地球、月球运动轨迹模拟 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangyisen0713/article/details/18216803 WPF模拟太阳。

原文:WPF太阳、地球、月球运动轨迹模拟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangyisen0713/article/details/18216803

WPF模拟太阳。月球、地球三者运动轨迹的模拟,现在还没有加上太阳自传的动画,有兴趣的可以加上。

主要是利用EllipseGeometry实现路径的绘制

xaml代码如下:

<Window
    x:Class="WpfApp11.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="地球、月球、太阳运动模拟"
    Width="1366"
    Height="768"
    WindowStartupLocation="CenterScreen"> 
    <Grid>
        <Grid.Background>
            <ImageBrush ImageSource="earth.jpg" />
        </Grid.Background>
        <Ellipse
            Name="ellipse3"
            Width="150"
            Height="150"
            Margin="619,321,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            ToolTip="太阳">
            <Ellipse.Fill>
                <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                    <GradientStop Offset="0.246" Color="#FFFFCA00" />
                    <GradientStop Offset="0.967" Color="#FFFF0034" />
                </LinearGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <!--  通过使用EllipseGeometry实现椭圆路径的绘制  -->
        <Path
            Margin="308,136,120,81"
            RenderTransformOrigin="0.415,0.498"
            Stroke="#FFFF7900"
            StrokeThickness="5">
            <Path.Data>
                <EllipseGeometry
                    x:Name="e1"
                    Center="400 250"
                    RadiusX="400"
                    RadiusY="250" />
            </Path.Data>
        </Path>
        <Grid
            Name="grid1"
            Width="484"
            Height="352"
            Margin="30,-12,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Grid.RenderTransform>
                <MatrixTransform x:Name="grid" />
            </Grid.RenderTransform>
            <!--  Grid触发器  -->
            <Grid.Triggers>
                <EventTrigger RoutedEvent="Page.Loaded">
                    <BeginStoryboard>
                        <Storyboard x:Name="sb1" RepeatBehavior="Forever">
                            <MatrixAnimationUsingPath
                                x:Name="ma1"
                                Storyboard.TargetName="grid"
                                Storyboard.TargetProperty="Matrix"
                                Duration="0:1:0" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>
            <Ellipse
                Name="ellipse1"
                Width="100"
                Height="100"
                Margin="227,94,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                ToolTip="地球">
                <Ellipse.Fill>
                    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                        <GradientStop Offset="0" Color="#FFE0DFDD" />
                        <GradientStop Offset="0.975" Color="#FF0035FF" />
                    </LinearGradientBrush>
                </Ellipse.Fill>
                <Ellipse.RenderTransform>
                    <TransformGroup>
                        <MatrixTransform x:Name="earth" />
                    </TransformGroup>
                </Ellipse.RenderTransform>
                <Ellipse.Triggers>
                    <EventTrigger RoutedEvent="Page.Loaded" />
                </Ellipse.Triggers>
            </Ellipse>
            <Ellipse
                Name="ellipse2"
                Width="50"
                Height="50"
                Margin="228,40,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                ToolTip="月球">
                <Ellipse.Fill>
                    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                        <GradientStop Offset="0" Color="White" />
                        <GradientStop Offset="0.943" Color="#FFDDD2BE" />
                    </LinearGradientBrush>
                </Ellipse.Fill>
                <Ellipse.RenderTransform>
                    <TransformGroup>
                        <MatrixTransform x:Name="moon" />
                    </TransformGroup>
                </Ellipse.RenderTransform>
                <Ellipse.Triggers>
                    <EventTrigger RoutedEvent="Page.Loaded">
                        <BeginStoryboard>
                            <Storyboard x:Name="sb2" RepeatBehavior="Forever">
                                <MatrixAnimationUsingPath
                                    x:Name="ma2"
                                    Storyboard.TargetName="moon"
                                    Storyboard.TargetProperty="Matrix"
                                    Duration="0:0:30" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Ellipse.Triggers>
            </Ellipse>
            <Path
                Width="122"
                Height="200"
                Margin="262.522,59,0,93"
                HorizontalAlignment="Left"
                Stroke="#FF00FF40"
                StrokeThickness="5">
                <Path.Data>
                    <EllipseGeometry
                        x:Name="ellipseGeometry1"
                        Center="50 100"
                        RadiusX="50"
                        RadiusY="100">
                        <EllipseGeometry.Transform>
                            <SkewTransform AngleY="-20" />
                        </EllipseGeometry.Transform>
                    </EllipseGeometry>
                </Path.Data>
            </Path>
        </Grid>
        <TextBox
            Width="448"
            Height="110"
            Margin="891,7,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Background="{x:Null}"
            BorderBrush="#FF0012FF"
            BorderThickness="0"
            Foreground="White"
            Text="地球饶太阳公转,月球饶地球公转。太阳、地球、月球都在自转太阳是太阳系的主宰,是恒星。地球是太阳系的一颗行星,月球是地球的一颗天然卫星。地球绕着太阳公转,月球绕着地球公转。太阳不可能位于地球和月球之间。"
            TextWrapping="Wrap" />
    </Grid>
</Window> 

 

最后效果如图:



    public MainWindow()
        {
            InitializeComponent();
            ma2.PathGeometry = ellipseGeometry1.GetFlattenedPathGeometry(); 
            ma1.PathGeometry = e1.GetFlattenedPathGeometry(); 
        }

 

目录
相关文章
|
C#
WPF技术之动画系列-上下运动
本例子展现动画小球上下循环运动
221 0
|
C# Windows
C# WPF 实现鼠标固定在指定范围内运动
原文:C# WPF 实现鼠标固定在指定范围内运动   一.背景: 需要实现带有三个屏幕,三个屏幕分别显示窗体,但鼠标只能在主窗体中运动,不能移动到其他的两个附屏中。
1236 0
|
C#
好玩的WPF第三弹:颤抖吧,地球!消失吧,地球!
原文:好玩的WPF第三弹:颤抖吧,地球!消失吧,地球! 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/46476421 我承认这一篇比较标题党,不过下面这个GIF貌似也和适合这个标题嘛。
867 0
|
测试技术 C# C++
工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧
原文:工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧   之前一篇《工欲善其事,必先利其器。VS2013全攻略(安装,技巧,快捷键,插件)!》 看到很多朋友回复和支持,非常感谢,尤其是一些拍砖的喷油,感谢你们的批评,受益良多。
1374 0
|
6月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
389 0
|
6月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
142 1
|
3月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
3月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
|
3月前
|
C# Windows
WPF中如何使用HandyCotrol控件库
WPF中如何使用HandyCotrol控件库
194 1