原文: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. C#+AE实现类似IDentify功能及对高亮显示相关接口的总结

    kenika 原文C#+AE实现类似IDentify功能及对高亮显示相关接口的总结 ArcMap中的Identify功能是有目的查看要素(Feature)属性信息经常使用的工具.ArcMap中的Ide ...

  2. Android中图形截取的方式介绍

    在Android的应用中,有时候我们想仅仅显示一部分图像,这时候就要求图形截图. 1.随意截取图像的方法,以下我们具体介绍一下android中的重要类--Bitmap public final cla ...

  3. Win7的ftp功能

    ftp作为文件传输协议,在一些特殊情况下用这种文件传输是比较方便的,并且win7本身也支持这个功能,在控制面板--->程序-->打开或关闭Windows功能,安装即可: 然后在管理控制台中 ...

  4. 那些移动端web踩过的坑2

    原文链接:https://geniuspeng.github.io/2018/04/26/mobile-issues2/ 坑是无穷无尽的,嗯-长江后坑推前坑~~ 关于音频自动播放 H5的audio标签 ...

  5. 【2016 Summary】为过往补课、为将来夯实

    前言 看了CSDN上非常多"我的2016"年终总结,也就不能免俗地来写一波.按着时间轴捋一捋这过去一年的经过,也算是这元旦假期总一个午后的休闲时光了.(结果没想到的是午饭前開始写的 ...

  6. Java并发包探秘 (一) ConcurrentLinkedQueue

    本文是Java并发包探秘的第一篇,旨在介绍一下Java并发容器中用的一些思路和技巧,帮助大家更好的理解Java并发容器,让我们更好的使用并发容器打造更高效的程序.本人能力有限,错误难免.希望及时指出. ...

  7. Android中的动画详解系列【1】——逐帧动画

    逐帧动画其实很简单,下面我们来看一个例子: <?xml version="1.0" encoding="utf-8"?> <animation ...

  8. 手把手教你完成App支付JAVA后台-支付宝支付JAVA

    接着上一篇博客,我们暂时完成了手机端的部分支付代码,接下来,我们继续写后台的代码. 后台基本需要到以下几个参数,我都将他们写在了properties文件中: 支付宝参数 AliPay.payURL = ...

  9. ant脚本中设置环境变量

    http://blog.csdn.net/quqi99/article/details/5329841

  10. 今天犯了个小错误:_dataArray.count>1 和_dataArray.count>0搞混淆了

    _dataArray.count>1 和_dataArray.count>0搞混淆了:当数据为一条时,条件不成立.应该_dataArray.count>=1  或者>0   ( ...