代码:

  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. 直播回顾 | 点击率提升400%,Ta是怎么做到的?

    Discovery第18期直播已于3月30日圆满结束,本期直播邀请天眼查做客直播间,从天眼查与华为Push用户增长服务合作历程切入,聚焦用户增长,分享提升应用活跃度和渠道ROI的经验与见解.一起来回顾 ...

  2. spark 异常值过滤 IQR

    def getIQR(df:DataFrame,colName:String):Array[Double]={ val tmpDf = df.withColumn(colName, col(colNa ...

  3. Canvas图形编辑器-数据结构与History(undo/redo)

    Canvas图形编辑器-数据结构与History(undo/redo) 这是作为 社区老给我推Canvas,于是我也学习Canvas做了个简历编辑器 的后续内容,主要是介绍了对数据结构的设计以及His ...

  4. React的理解以及特性

    一.是什么 React,用于构建用户界面的 JavaScript 库,提供了 UI 层面的解决方案 遵循组件设计模式.声明式编程范式和函数式编程概念,以使前端应用程序更高效 使用虚拟DOM来有效地操作 ...

  5. JDBC数据库汇总Attack研究

    前言 针对除Mysql的其它数据库的jdbc attack分析 H2 RCE 介绍 H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中 ...

  6. Jenkins实战系列(一)——Jenkins简介

    Jenkins是一个开源的自动化构建工具,可以帮助开发人员自动构建.测试和部署软件.它支持多种编程语言.版本控制系统和构建工具,如Java.Git.Maven等.Jenkins的核心功能是通过一系列插 ...

  7. 使用input标签的时候报错,提示Form elements must have labels: Element has no title attribute Element has no placeholder attribute

    使用input标签的时候报错,提示Form elements must have labels: Element has no title attribute Element has no place ...

  8. 我,PolarDB云原生数据库,5年来实现这些重磅技术创新

    简介: 过去5年,阿里云针对PolarDB进行了诸多创新,通过采用存储计算分离.软硬一体化设计,PolarDB实现成本仅为传统商业数据库的十分之一.所实现的计算.内存与存储资源的"三层解耦& ...

  9. 十年再出发,Dubbo 3.0 Preview 即将在 3 月发布

    ​简介:随着Dubbo和HSF的整合,我们在整个开源的体系中更多地去展现了 HSF 的能力,能够让更多的人通过使用 Dubbo 像阿里巴巴之前使用 HSF 一样更好的构建服务化的系统. 2011 年, ...

  10. 可观测告警运维系统调研——SLS告警与多款方案对比

    简介: 本文介绍对比多款告警监控运维平台方案,覆盖阿里云SLS.Azure.AWS.自建系统(ELK.Prometheus.TICK)等方案. 前言 本篇是SLS新版告警系列宣传与培训的第三篇,后续我 ...