wpf 空间坐标系下,画一个立方体轮廓

代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Worignpt = new Point(250, 200);//空间坐标系原点
o = new Point3d(0, 0, 0);
a = new Point3d(100, 0, 0);
b = new Point3d(100, 100, 0);
c = new Point3d(0, 100, 0);
d = new Point3d(100, 100, 100);
e = new Point3d(100, 0, 100);
f = new Point3d(0, 0, 100);
g = new Point3d(0, 100, 100);
//xishu = Math.Sqrt(2d) / 2.0;
xishu = 0.5;
}
Point Worignpt;
Point3d o;
Point3d a;
Point3d b;
Point3d c;
Point3d d;
Point3d e;
Point3d f;
Point3d g;
double xishu = 0d;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var wo = Worignpt;
var wa = ConvertCPoint(wo, Convert2d(a));
var wb = ConvertCPoint(wo, Convert2d(b));
var wc = ConvertCPoint(wo, Convert2d(c));
var wd = ConvertCPoint(wo, Convert2d(d));
var we = ConvertCPoint(wo, Convert2d(this.e));
var wf = ConvertCPoint(wo, Convert2d(f));
var wg = ConvertCPoint(wo, Convert2d(g)); var oa = CreateLine(wo, wa);
canvas.Children.Add(oa); var ab = CreateLine(wa, wb);
canvas.Children.Add(ab); var bc = CreateLine(wb, wc);
canvas.Children.Add(bc); var oc = CreateLine(wo, wc);
canvas.Children.Add(oc); var ae = CreateLine(wa, we);
canvas.Children.Add(ae); var ed = CreateLine(we, wd);
canvas.Children.Add(ed); var db = CreateLine(wd, wb);
canvas.Children.Add(db); var dg = CreateLine(wd, wg);
canvas.Children.Add(dg); var gc = CreateLine(wg, wc);
canvas.Children.Add(gc); var ef = CreateLine(we, wf);
canvas.Children.Add(ef); var fg = CreateLine(wf, wg);
canvas.Children.Add(fg); var of = CreateLine(wo, wf);
canvas.Children.Add(of); } public Line CreateLine(Point pt1,Point pt2)
{
Line l = new Line();
l.Stroke = Brushes.Red;
l.StrokeThickness = 1;
l.X1 = pt1.X;
l.X2 = pt2.X;
l.Y1 = pt1.Y;
l.Y2 = pt2.Y; return l;
}
//空间坐标系转直角坐标系
public Point Convert2d(Point3d p3d)
{
Point p = default; int x = p3d.y;
int y = p3d.z; p.X = x - p3d.x * xishu;
p.Y = y - p3d.x * xishu; return p;
}
//直角坐标系转wpf客户端坐标
public Point ConvertCPoint(Point orign,Point pt)
{
Point wPt = default;
wPt.X = pt.X + orign.X;
wPt.Y = orign.Y - pt.Y;
return wPt;
}
} public struct Point3d
{
public int x;
public int y;
public int z;
public Point3d(int x,int y,int z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
以高中数学里的空间坐标系为基础,做的。做出来,看着还行,感觉画的挺标准的。
wpf 空间坐标系下,画一个立方体轮廓的更多相关文章
- ThreeJS两个点作为起始坐标画一个立方体
drawLineBox(new THREE.Vector3(100, 50, 0), new THREE.Vector3(200, 100, 100)); function drawLineBox(s ...
- Directx11学习笔记【十二】 画一个旋转的彩色立方体
上一次我们学习了如何画一个2D三角形,现在让我们进一步学习如何画一个旋转的彩色立方体吧. 具体流程同画三角形类似,因此不再给出完整代码了,不同的部分会再说明. 由于我们要画彩色的立方体,所以顶点结构体 ...
- Directx11教程(7) 画一个颜色立方体
原文:Directx11教程(7) 画一个颜色立方体 前面教程我们通过D3D11画了一个三角形,本章我们将画一个颜色立方体,它的立体感更强.主要的变动是ModelClass类,在Model ...
- Effective前端3:用CSS画一个三角形
p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...
- DX11 Without DirectX SDK--03 渲染一个立方体
回到 DirectX11--使用Windows SDK来进行开发 一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重 ...
- Effective前端(3)用CSS画一个三角形
来源:https://zhuanlan.zhihu.com/p/26160325 三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以 ...
- 简述WPF中的画刷(Brush)
原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...
- WPF样式之画刷结合样式
第一种画刷,渐变画刷GradientBrush (拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内.现在拿他来说事.),还有一个圆心渐变画刷Radia ...
- canvas游戏小试:画一个按方向键移动的圆点
canvas游戏小试:画一个按方向键移动的圆点 自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...
- 用PS画一个齿轮
以前只会画圆画方,这没技术含量.今天学了一个稍难一点的,画一个齿轮.图形有圆也有方.以下描述如何画出来的. 一.打开PS准备一画布,画一矩形并且填充颜色. 二.编辑->自由变换(CTRL+T), ...
随机推荐
- Linux 操作另一台服务器
服务器信任 在运维场景中,如果需要在一台服务器操作另一台服务器,就需要目标服务器(下面称为 B 服务器)信任当前服务器(下面称为 A 服务器). 在 A 服务器生成证书. ssh-keygen -t ...
- 我只用了3步,实现了一个逼真的3D场景渲染
给3D模型及环境场景渲染出兼具质感和真实感的材质效果,需要经历几步? 显然,目前的3D模型材质渲染技术,还无法实现简单几步就能搞定的标准化作业来量化,完成一个质量过关的3D模型渲染,一般需要: 1.准 ...
- 插入排序的基本实现【数据结构与算法—TypeScript 实现】
笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置 特性 复杂度分析 时间复杂度: 最好情况 ...
- 直播预告丨Hello HarmonyOS进阶课程第二课——计算机视觉
为了帮助初识HarmonyOS的开发者快速入门,我们曾推出Hello HarmonyOS系列一共5期课程,从最基础的配置IDE和创建Hello World开始,详细介绍HarmonyOS基础.开发环境 ...
- nginx重新整理——————开篇[一]
前言 因为整理http协议,顺便把nginx 整理了. 正文 主要作用: 正向代理 反向代理(负载均衡.缓存等) 静态资源 nginx 的优点: 适合高并发,一个进程可以处理很多的请求. 扩展性强,有 ...
- mysql 必知必会整理—数据插入和更新还有删除[十]
前言 简单整理数据插入更新还有删除. 正文 插入: INSERT INTO customers( customers.cust_address, customers.cust_city, custom ...
- 重新整理 mysql 基础篇————— 索引模型[五]
前言 简单整理一下索引模型. 正文 对我们开发人员来说,索引感觉非常的重要. 因为索引好用,但是不能多建,因为这影响插入,不能少建,因为这影响读取. 有些为了能够多建索引,通过从多个从库中读取数据,再 ...
- 解析 RocketMQ 业务消息——“事务消息”
简介: 本篇文章通过拆解 RocketMQ 事务消息的使用场景.基本原理.实现细节和实战使用,帮助大家更好的理解和使用 RocketMQ 的事务消息. 作者:合伯 引言:在分布式系统调用场景中存在 ...
- [FAQ] Goland 始终没有包代码的提示 ?
表现:import 引入的包始终是红色的,表示没有找到引入的包. 注意,在这里开启Go Modules: 然后在 Exteneral Libraries 里看到 Go Modules 即可. Refe ...
- WPF控件:密码框绑定MVVM
以下是一种使用 MVVM 模式的方法: 首先,在 ViewModel 中添加一个属性来保存密码,我们可以使用 SecureString 类型. // 密码变量 private SecureString ...