原文: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. mha && 脚本拉起

    ip分布:  vip 192.168.238.222 mha_manager 192.168.238.131 监控服务器 master 192.168.238.128 主库GTID复制模式 slave ...

  2. 使用ionic3快速开发webapp(一)

    Ionic可以让我们使用web技术快速构建接近原生体验的跨平台移动应用. 一.安装ionic 1.需要先安装 Node.js(版本8.x之上): 2.安装cordova 和 ionic: $ npm ...

  3. POJ 1251 Jungle Roads (zoj 1406) MST

    传送门: http://poj.org/problem?id=1251 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406 P ...

  4. Android 获取签名证书的具体信息(Eclipse和Android studio通用)

    今天要用到签名证书的MD5,可是这个仅仅有在第一次生成的时候我看到了,这可怎么办呢,幸亏我们有google,我们执行以下的命令就OK了. keytool -list -v -keystore 签名证书 ...

  5. MinGW和MSYS项目是在一起的(翻译官网)

    翻译MinGW官网的首页,首页描述了MinGW和MSYS的基本情况. Home of the MinGW and MSYS Projects(我才知道,MinGW和MSYS项目是在一起的 -_-!) ...

  6. Codeforces 491B. New York Hotel 最远曼哈顿距离

    最远曼哈顿距离有两个性质: 1: 对每一个点(x,y)  分别计算  +x+y , -x+y , x-y , -x-y 然后统计每种组合的最大值就能够了, 不会对结果产生影响 2: 去掉绝对值 , 设 ...

  7. 超级简单的Android Studio jni 实现(无需命令行)

    1.配置Anroid Studio(这步是关键) 使用[command+,] 打开Preferences,选择External Tools,点击加号框如下图: Paste_Image.png 点击+号 ...

  8. 【t030】数字构造

    Time Limit: 3 second Memory Limit: 256 MB [问题描述] 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行 ...

  9. [Angular] Difference between ngAfterViewInit and ngAfterContentInit

    Content is what is passed as children. View is the template of the current component. The view is in ...

  10. ZOJ Monthly, June 2014 解题报告

    A.Another Recurrence Sequence problemId=5287">B.Gears 题目大意:有n个齿轮,一開始各自为一组.之后进行m次操作,包含下面4种类型: ...