.NET 社区里的活跃分子 Luke H. 在一篇文章中展示了如何在 400 行的代码中,用 C# 3 和 LINQ 编写一个 Ray Tracer。
Ray Trace 是在二维表面上,比如计算机屏幕或者打印的纸张上,渲染 3D 图像的一种方法。它的做法通常是从一个 2D 表面的像素跟踪一个虚拟的光束到它第一次触到的三维物体。根据所触到的物体的纹理,它会继续跟踪,直到到达光源。
Luke 使用 LINQ 简化了分类(sorting)和过滤(filtering)集合,以及计算交集时的循环的代码。虽然对象和集合不会明显地改变例子中的代码,代码中还是对它们进行了初始化。
代码之所以得到简化和减少的真正原因是,Luke 用 Lambda 表达式(expression)代替了子类(subclass)和重载了委托(delegate)。
Ray Tracer 的相关解释和本文提到的源代码可以在 Luke 的博客中得到。
更多内容推荐
.NET 无侵入自动化探针原理和主流实现
最近,我在微信公众号和博客园分享了一篇关于 .NET 微服务系统迁移至.NET 6.0 的故事 的文章,引起了许多读者的关注。其中,许多人对基于 OpenTelemetry .NET 的观测指标和无侵入自动化探针颇感兴趣。事实上,我已计划抽出时间,与大家分享这方面的内容。
.NET 中缓存的实现
在实际开发中我们经常会用到是缓存。它是的核心思想是记录过程数据重用操作结果。当程序需要执行复杂且消耗资源的操作时,我们一般会将运行的结果保存在缓存中,当下次需要该结果时,将它从缓存中读取出来。缓存适用于不经常更改的数据,甚至永远不改变的数据
2021-11-30
游戏引擎中的实时渲染和在 V-Ray 中渲染有什么区别?
游戏引擎中的实时渲染和在V-Ray中渲染有什么区别,下面我们一起来分析一下,从2个方面来具体分析实时渲染和在V-Ray中渲染种的不一样的区别。
2022-12-19
12. 如何通过 3UMEMO 表改善问题点?
2023-10-17
EPPlus - 用于 .NET 的 Excel 电子表格
我们都会遇到需要用程序操作Excel电子表格的情形。在这里推荐一个.NET非常好用的包EPPlus。
2022-08-24
AWS Lambda 增加对 .NET 6 的支持
AWS Lambda 做了哪些针对性改进?
英伟达是如何做 GPU 编程的(一)
在这篇文章中,我将介绍最简单、最高效、最可移植的加速计算方式,即三种可以用于GPU编程的方式。
用 TornadoVM 让 Java 性能更上一个台阶
在QCon Plus大会上,Juan Fumero谈到了TornadoVM,一个JVM高性能计算平台,允许在运行时将Java代码加载在异构硬件加速器上运行。
.NET6 新东西 -- 隐式命名空间引用
早在 .NET 6 Preview 7版本中微软就已经引入隐式命名空间引用。在.NET Preview 7这个版本中这个功能是默认开启的,如果需要禁用它的化就需要配置DisableImplicitNamespaceImports来禁用,但是到了.NET6 RC1版本的时候这个功能是禁用的,如果要使用就需要通过
2021-11-17
.NET6 新东西 ---TryGetNonEnumeratedCount
在.NET6中微软新增了 TryGetNonEnumeratedCount 方法,让我们可以计算可枚举类型元素的总数。到这里一定有读者会问:LINQ中已经包含了Count方法,为什么还要增加TryGetNonEnumeratedCount方法呢?要解决这个问题,我们先来看一段代码:
2021-12-26
14. 增强体能的六大方法(二)
2023-10-17
08. 华为基层人员管理
2023-10-17
英伟达是如何做 GPU 编程的(二)
这是标准并行编程系列文章的第二篇,讲述了在标准语言中使用并行来加速计算的优势。
第 06 节 客户为什么见你
2023-10-17
.NET 6 新东西 -- 高性能日志
一提到日志记录,大家就会想到log4net,如果提到.NET中的日志记录,一定会想到ILogger,这个ILogger是.NET中常用的提供的日志记录的方式,下面的代码是.NET Core WebAPI 项目初始化的代码,其中就使用了ILogger来提供日志记录:
2021-12-17
第 03 节 关系信任:用情感绑架客户
2023-10-17
【C 语言】一篇速通操作符
判断语句顾名思义:是由我们打代码的人想让代码执行哪段语句,这就叫做是判断语句!
2022-03-02
.NET6 新东西 -- 插值字符串优化
字符串是我们平时使用最多的一个类型,从C#6开始就支持插值字符串,方便我们进行字符串的操作,并且大部分分析器也推荐使用插值这种写法,因为它够使得我们的代码更加清晰简洁,到了.NET6中的C#10则为我们提供了更好的实现方式以及更佳的性能。那么什么是插值
2021-11-25
.NET 内存管理必备知识
小型对象是被分配在小型对象堆SOH上的。SOH有3代,分别是:第0代,第1代,第2代。对象根据寿命向上移动。将新对象放在Gen 0上。当第0代充满时,.NET垃圾收集器会处理不需要的对象,并将其它内容移至第1代上,如果第1代充满了那么垃圾回收会再次运行处理不需要
2021-12-10
29. 应收账款和固定资产的管理技巧
2023-10-17
推荐阅读
小语言才是编程的未来
编程语言21. 巨大的下沉市场红利 - 以拼多多数字化战略为例
2023-10-17
致谢
2023-12-01
C++ 变化太大!该重新学习这门语言了
编程语言Visual Studio 2022 17.7 发布,带来.NET 和 C++ 开发新功能及性能增强
编程语言前言
2023-12-01
用不到 100 行 Rust 使 Python 快 100 倍
电子书
大厂实战PPT下载
换一换 张颖峰 | 英飞流 CEO
张鑫 | 微软亚洲研究院 研发工程师
汤海涛 | 麦当劳中国 数字化副总裁
评论