WPF太阳、地球、月球运动轨迹模拟
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太阳、地球、月球运动轨迹模拟的更多相关文章
- WPF案例(二)模拟Apple OS 界面前后180度反转
原文:WPF案例(二)模拟Apple OS 界面前后180度反转 我们在设计应用程序界面的时候,为了充分利用界面空间,住住需要灵活的界面布局方式,比如可以在界面正面空间上定义一个Chart,背面空间上 ...
- WPF案例(-)模拟Windows7 Win+Tab切换
原文:WPF案例(-)模拟Windows7 Win+Tab切换 一个使用Wpf模拟Windows7 Win+Tab页面切换的小程序,使用快捷键Ctrl+Down或Ctrl+Up在示例程序各个页面元素之 ...
- 开玩笑html5(五岁以下儿童)---绕地球月球,地球绕太阳运动(canvas实现,同样可以移动哦)
请珍惜劳动小编成果,这篇文章是原来小编,转载请注明出处. 速度的參数与真实速度有点差距.大家能够自行调整 <!DOCTYPE html> <html> <head> ...
- 使用Xcode + Python进行IOS运动轨迹模拟
前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...
- 太阳地球月亮运行动画(使用@keyframes)
闲来无事的demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- wpf绑定静态变量,模拟rem单位
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...
- 【WPF】三维模型中的“照相机”
WPF 部分支持三维模型,为啥说是部分支持?毕竟 WPF 的侧重点还是在应用开发上,虽然也有些游戏是用 WPF 开发的,不过,老周想啊,如果真要开发游戏,最好用专门的框架,WPF 应当用于开发应用功能 ...
- three.js 制作太阳系统
最近学了three.js,想拿来练练手,喜欢宇宙,于是亲手撸代码来完成这个,为了更真实,于是查了一些相关资料.1. 距离太阳由近及远分别是[水星,金星,地球,火星,木星,土星,天王星,海王星]2. 他 ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
随机推荐
- 基于Android Fragment功能的样例
通过近期空暇时候对Fragment的学习,尝试着写了一个小Demo,将在开发的时候能经常使用到的Fragment知识放在一起,写过了这个Demo对Android Fragment的了解更加深入了,以后 ...
- [Recompose] Add Local State with Redux-like Reducers using Recompose
Learn how to use the 'withReducer' higher order component using the alternative reducer form. If you ...
- JS学习十四天----server端运行JS代码
server端运行JS代码 话说,当今不在client使用JS代码才是稀罕事.因为web应用的体验越来越丰富,client用JS实现的逻辑也越来越多,这造成的结果就是某些差点儿一致的逻辑须要在clie ...
- python开发环境设置(windows)
python开发环境设置(windows) 1) python2.7.3安装 在www.python.org上下载python-2.7.6.amd64.msi软件.安装完毕后设置path路径.控制面 ...
- js 鼠标坐标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CGI原理解析之二------WEB服务和CGI交互数据
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...
- [Docker] Build Your Own Custom Docker Image
In this lesson we will cover how to build your own custom Docker image from scratch. We'll walk thro ...
- java中的subString具体解释及应用
substring(參数)是java中截取字符串的一个方法 有两种传參方式 一种是public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个 ...
- AE属性表操作
转自chanyinhelv原文AE属性表操作 实现的操作包括:1.打开属性表:2.编辑属性表:3.增加属性列:4.数据排序:5.字段计算…… 嗯,实现的功能目前就这些吧,后续还会继续跟进,还望大家多多 ...
- 怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨
从最初学习使用log4j的时候,网上和书本上主要都是使用"log4j.properties"这种属性格式,配置日志.多年以来,一直使用这种格式,总的来说,简单.够用. 而有十 ...