代码:

  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 空间坐标系下,画一个立方体轮廓的更多相关文章

  1. ThreeJS两个点作为起始坐标画一个立方体

    drawLineBox(new THREE.Vector3(100, 50, 0), new THREE.Vector3(200, 100, 100)); function drawLineBox(s ...

  2. Directx11学习笔记【十二】 画一个旋转的彩色立方体

    上一次我们学习了如何画一个2D三角形,现在让我们进一步学习如何画一个旋转的彩色立方体吧. 具体流程同画三角形类似,因此不再给出完整代码了,不同的部分会再说明. 由于我们要画彩色的立方体,所以顶点结构体 ...

  3. Directx11教程(7) 画一个颜色立方体

    原文:Directx11教程(7) 画一个颜色立方体       前面教程我们通过D3D11画了一个三角形,本章我们将画一个颜色立方体,它的立体感更强.主要的变动是ModelClass类,在Model ...

  4. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  5. DX11 Without DirectX SDK--03 渲染一个立方体

    回到 DirectX11--使用Windows SDK来进行开发 一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重 ...

  6. Effective前端(3)用CSS画一个三角形

    来源:https://zhuanlan.zhihu.com/p/26160325 三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以 ...

  7. 简述WPF中的画刷(Brush)

    原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...

  8. WPF样式之画刷结合样式

    第一种画刷,渐变画刷GradientBrush (拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内.现在拿他来说事.),还有一个圆心渐变画刷Radia ...

  9. canvas游戏小试:画一个按方向键移动的圆点

    canvas游戏小试:画一个按方向键移动的圆点   自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...

  10. 用PS画一个齿轮

    以前只会画圆画方,这没技术含量.今天学了一个稍难一点的,画一个齿轮.图形有圆也有方.以下描述如何画出来的. 一.打开PS准备一画布,画一矩形并且填充颜色. 二.编辑->自由变换(CTRL+T), ...

随机推荐

  1. sqli_lab Less1练习笔记

    首先观察页面信息,看有没有提示. 很显然,这个页面让我们传入id这个参数(根据题目的分支,应该是get方法) 使用HackBar进行传入参数,首先传入id=1 http://localhost/sql ...

  2. HarmonyOS应用性能与功耗云测试

    性能测试 性能测试主要验证HarmonyOS应用在华为真机设备上运行的性能问题,包括启动时长.界面显示.CPU占用和内存占用.具体性能测试项的详细说明请参考性能测试标准. 性能测试支持Phone和TV ...

  3. Linux-主机之间创建免密

    一.四台主机进行免密 192.168.10.6 192.168.10.11 192.168.10.12 192.168.10.13 二.192.168.10.6主机生成密钥对,并将公钥传输到其它所有主 ...

  4. web 报表工具如何自适应

    现在的报表用户已经不再将报表作为一个单纯的报表工具看待了,有时候也会当作页面工具来使用,这时为了页面显示工整美观,就需要报表能够自适应宽度.下面我们就基于润乾报表来讲一下是如何做到自适应展现报表. 产 ...

  5. 重新点亮shell————awk 控制语句[十三]

    前言 简单介绍一下控制语句. 正文 例子1: 例子2: 例子3 for循环: 例子4, sum会复用: 同样,其他的while 和 do while 也是可以在awk中使用的. 结 下一节awk数组.

  6. spring-jdbc5新特性,一个配置文件解决临时修改数据库的问题

    import java.sql.SQLException; import java.util.List; import java.util.Map; import javax.sql.DataSour ...

  7. 简述Linux磁盘IO

    1.什么是磁盘 在讲解磁盘IO前,先简单说下什么是磁盘.磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 1.1 机械磁盘 第一类,机械磁盘,也称为硬盘驱动器 ...

  8. SysOM 案例解析:消失的内存都去哪了 !| 龙蜥技术

    简介: 这儿有一份"关于内存不足"排查实例,请查收. 文/系统运维 SIG 在<AK47 所向披靡,内存泄漏一网打尽>一文中,我们分享了slab 内存泄漏的排查方式和工 ...

  9. DTCC 2020 | 阿里云梁高中:DAS之基于Workload的全局自动优化实践

    简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.在12.23日性能优化与SQL审计专场上,邀请了阿里巴巴数据库技术团队高级技术专家梁高中为大家介绍DAS之基于Workload的 ...

  10. 阿里云发布第四代神龙架构,提供业界首个大规模弹性RDMA加速能力

    ​简介:10月20日,2021年杭州云栖大会上,阿里云发布第四代神龙架构,升级至全新的eRMDA网络架构,是业界首个大规模弹性RDMA加速能力. 10月20日,2021年杭州云栖大会上,阿里云发布第四 ...