原文: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();
}

WPF太阳、地球、月球运动轨迹模拟的更多相关文章

  1. WPF案例(二)模拟Apple OS 界面前后180度反转

    原文:WPF案例(二)模拟Apple OS 界面前后180度反转 我们在设计应用程序界面的时候,为了充分利用界面空间,住住需要灵活的界面布局方式,比如可以在界面正面空间上定义一个Chart,背面空间上 ...

  2. WPF案例(-)模拟Windows7 Win+Tab切换

    原文:WPF案例(-)模拟Windows7 Win+Tab切换 一个使用Wpf模拟Windows7 Win+Tab页面切换的小程序,使用快捷键Ctrl+Down或Ctrl+Up在示例程序各个页面元素之 ...

  3. 开玩笑html5(五岁以下儿童)---绕地球月球,地球绕太阳运动(canvas实现,同样可以移动哦)

    请珍惜劳动小编成果,这篇文章是原来小编,转载请注明出处. 速度的參数与真实速度有点差距.大家能够自行调整 <!DOCTYPE html> <html> <head> ...

  4. 使用Xcode + Python进行IOS运动轨迹模拟

    前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...

  5. 太阳地球月亮运行动画(使用@keyframes)

    闲来无事的demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. wpf绑定静态变量,模拟rem单位

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  7. 【WPF】三维模型中的“照相机”

    WPF 部分支持三维模型,为啥说是部分支持?毕竟 WPF 的侧重点还是在应用开发上,虽然也有些游戏是用 WPF 开发的,不过,老周想啊,如果真要开发游戏,最好用专门的框架,WPF 应当用于开发应用功能 ...

  8. three.js 制作太阳系统

    最近学了three.js,想拿来练练手,喜欢宇宙,于是亲手撸代码来完成这个,为了更真实,于是查了一些相关资料.1. 距离太阳由近及远分别是[水星,金星,地球,火星,木星,土星,天王星,海王星]2. 他 ...

  9. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

随机推荐

  1. [Javascript] Validate Data with the Every() Method

    The every method returns true or false based on whether or not every item in the array passes the co ...

  2. 无意中发现Markdown,最终解放了我

    文件夹 概述 换行 删除线 链接自己主动识别 表格 代码块高亮 定义列表 脚注 自己主动生成文件夹 參考资料 正文 概述 大部分情况下,Markdown的基本的语法已够我们使用,比方随性记录点东西.非 ...

  3. 使用 Google Guava 美化你的 Java 代码:1~4 【转】

    文章转载自:http://my.oschina.net/leejun2005/blog/172328 1.使用Google Collections,Guava,static imports编写漂亮代码 ...

  4. Chinese remainder theorem

    https://en.wikipedia.org/wiki/Chinese_remainder_theorem http://planetmath.org/ChineseRemainderTheore ...

  5. linux系统下安装与配置apache

    搭建环境:VMware上虚拟的linux 主机:win  7 安装linux下的Apache前准备: 1.httpd服务的配置文件,默认存储路径:/etc/httpd/conf/httpd.conf( ...

  6. RMAN之一:快速入门 分类: H2_ORACLE 2014-02-17 16:11 689人阅读 评论(0) 收藏

    1.数据导出基础 (1)创建datapump导出文件的目录对象并为相应用户授予权限. 出于安全考虑,不允许oracle用户直接在OS上进行文件的操作,而应通过directory对象指定. SQL> ...

  7. 在RedHa上安装MRTG监控网卡流量

    http://os.51cto.com/art/201103/252149.htm 2011-03-30 15:05 张微波 phpchina 字号:T | T 在RedHa上安装MRTG监控网卡流量 ...

  8. php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)

    php实现 求int型数据在内存中存储时1的个数(函数都可自己实现) 一.总结 一句话总结:函数我们自己都可以实现,尤其是很多基础函数,没有工具的时候自己写. 1.php进制转换函数? base_co ...

  9. [React Router v4] Redirect to Another Page

    Overriding a browser's current location without breaking the back button or causing an infinite redi ...

  10. [Vue] Import component into page

    Components are one of the most powerful features of Vue. Let's take a look at how to write our first ...