代码:

  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. C# 面试问答

    引用:https://www.cnblogs.com/zh7791/p/13705434.html   1.什么是 COM? COM 代表组件对象模型.COM 是微软技术之一.使用这项技术,我们可以开 ...

  2. C#利用自动化接口编写OPC客户端,OPC Client,源码直接放网盘

    引用:https://www.cnblogs.com/flh1/p/12409266.html 链接: https://pan.baidu.com/s/1Vs08c7qjShEc9GQ8dvCkdg ...

  3. UJCMS 9.1.0 发布,国内开源 java cms

    许可协议从GPL-2改为Apache-2.0,更宽松的协议,方便用户将系统集成到自身的应用中. 修复了已知bug,系统更加稳定. 升级日志(9.1.0) 修复前台全文搜索没有结果 web.xml se ...

  4. HarmonyOS网络管理开发—Socket连接

      简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议. 基本概念 ● Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. ●  ...

  5. HarmonyOS非线性容器特性及使用场景

      非线性容器实现能快速查找的数据结构,其底层通过hash或者红黑树实现,包括HashMap.HashSet.TreeMap.TreeSet.LightWeightMap.LightWeightSet ...

  6. 直播预告丨Hello HarmonyOS进阶系列课程重磅来袭,4月27日开播

    为了帮助初识HarmonyOS的开发者快速入门,我们曾推出Hello HarmonyOS系列一共5期课程(传送门:https://developer.huawei.com/consumer/cn/tr ...

  7. CS101

    Turing machine:图灵机 理论上可以计算任何东西 CPU(Center Process Unit):中央处理器 是现代电脑的"大脑",其中包含数十亿细小开关的硅片,即晶 ...

  8. 鸿蒙HarmonyOS实战-ArkUI组件(Tabs)

    一.Tabs Tabs组件是一种常见的用户界面(UI)组件,它是一个可以容纳多个选项卡的容器组件.每个选项卡通常包含一个面板和一个标签,用户可以通过点击标签来切换面板.Tabs组件通常用于展示多个相关 ...

  9. 深度解读《深度探索C++对象模型》之拷贝构造函数

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文. 写作不易,请有心人到我的公众号上 ...

  10. Kafka的实现细节

    Kafka的实现细节 一.Topic和Partition 在Kafka中的每一条消息都有一个topic.一般来说在我们应用中产生不同类型的数据,都可以设置不同的主题.一个主题一般会有多个消息的订阅者, ...