首页 > 其他分享 >0190-定义三维向量

0190-定义三维向量

时间:2024-07-16 09:31:02浏览次数:5  
标签:format u64 三维 content WIDTH let 0190 f64 向量

环境

  • Time 2022-11-14
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

说明

参考:https://raytracing.github.io/books/RayTracingInOneWeekend.html

目标

将之前定义的三种颜色,封装到一个三维的向量中,保持原有的逻辑不变。

main.rs

use crate::vector3::Color;

mod vector3;

fn main() {
    // 图片的宽和高
    const WIDTH: u64 = 256;
    const HEIGHT: u64 = 256;

    // 输出图片,第一行输出 P3,表示像素图
    let mut content = String::from("P3");
    // 输出宽和高,和最大颜色值
    content.push_str(&format!("\n{WIDTH} {HEIGHT}\n255\n"));

    for j in (0..HEIGHT).rev() {
        // 进度
        eprintln!("Scan lines remaining: {j}");
        for i in 0..WIDTH {
            let r = i as f64 / (WIDTH - 1) as f64; // Red
            let g = j as f64 / (HEIGHT - 1) as f64; // Green
            let color = Color::new(r, g, 0.25);

            content.push_str(&color.format_str());
        }
    }
    println!("{}", content);
    eprintln!("Done.");
}

vector3.rs

pub type Color = Vector3;

#[derive(Default)]
pub struct Vector3 {
    x: f64,
    y: f64,
    z: f64,
}

impl Vector3 {
    pub fn new(x: f64, y: f64, z: f64) -> Self {
        Self { x, y, z }
    }

    pub fn format_str(self) -> String {
        let x = (255.999 * self.x) as u64;
        let y = (255.999 * self.y) as u64;
        let z = (255.999 * self.z) as u64;

        format!("{x} {y} {z}\n")
    }
}

输出

cargo run > image.ppm

总结

将三种颜色封装到了三维的向量中。原书定义了很多的工具方法,之后用到了再定义。

附录

标签:format,u64,三维,content,WIDTH,let,0190,f64,向量
From: https://www.cnblogs.com/jiangbo4444/p/18304515

相关文章

  • 数据库-SQL_duckdb向量化计算-vector
    duckdbDuckDB0.10.0引入了新的数据类型ArrayArray不同于Postgres的数组类型(Postgres的是可变长度的),DuckDB的Array列存储固定大小的数组目前相似度计算支持单精度浮点数(4字节)DuckDB的FLOAT4=numpy.float3目前vss功能还有待丰富--持续关注Vector向......
  • 【预测】改进粒子滤波的无人机三维航迹预测方法(Matlab代码实现)
     ......
  • 网页三维CAD参数化建模开发框架的搭建教程
    前言mxcad3d是基于mxdraw的基础上,使用TypeScript和C++语言开发的一个网页三维CAD参数化建模框架,我们为开发者提供了丰富的参数化建模的开发接口,用户可以高效、便捷的对基本图元进行创建、同时丰富的JS开发接口方便了用户实现复杂的模型创建和CAD二次开发,网页测试DEMO链接如下:http......
  • 乘积量化pq:将高维向量压缩 97%
    向量相似性搜索在处理大规模数据集时,往往面临着内存消耗的挑战。例如,即使是一个包含100万个密集向量的小数据集,其索引也可能需要数GB的内存。随着数据集规模的增长,尤其是高维数据,内存使用量会迅速增加,这可能导致内存管理问题。乘积量化(PQ)是一种流行的方法,能够显著压缩高维......
  • 3D感知视觉表示与模型分析:深入探究视觉基础模型的三维意识
    在深度学习与大规模预训练的推动下,视觉基础模型展现出了令人印象深刻的泛化能力。这些模型不仅能够对任意图像进行分类、分割和生成,而且它们的中间表示对于其他视觉任务,如检测和分割,同样具有强大的零样本能力。然而,这些模型是否能够理解图像所描绘的三维世界结构,仍然是一个值得......
  • [namespace hdk] 向量 direct_vector
    我忏悔我有罪我心情又不好了不知道干什么所以又不小心封了个东西啊啊啊啊啊啊啊啊功能已重载[]运算符(右值)谁能教教我怎么把[]变成stl类似的左值表达式(直接返回地址需要在前面加*,挺麻烦的)已重载=运算符(可使用向量或std:::vector)已重载++=--=-(负号)*(点乘)*=(......
  • manim学习笔记04:使用manim,表示向量和加法。
    manim学习笔记04:使用manim,表示向量和加法。一,相关定义1.有向线段:规定若线段AB的端点为起点为A,B为终点,则线段就具有了从起点A到终点B的方向和长度。具有方向和长度的线段叫做有向线段。接下来我们体会一下相关的代码:classVectorArrow(Scene):defconstruct(self):......
  • 三维cad具有的特点和必要的资源
    (1)三维几何建模引擎几何要素多功能多:拉伸、旋转、扫掠、放样、填充、桥接、布尔等鲁棒、精确且高效对参数化的支持:特征建模、拓朴命名兼容性、可扩展性(2)几何约束求解器包括草图中的2D几何约束求解器,装配中的3D几何约束求解器。几何欠约束系统的优化匹配几何约束冗余性......
  • 多目标螳螂搜索算法MOMSA求解无人机三维路径规划,可以自行修改障碍物位置(MATLAB代码)
    无人机路径规划多目标优化求解是一个复杂的过程,涉及到多个目标的考量和优化算法的应用。以下是一些关键点和相关算法的概述:1.**多目标优化策略**:在无人机路径规划中,需要同时考虑多个目标,如路径长度、安全性、飞行时间和动力学约束等。优化这些目标可以帮助无人机在复杂环境中......
  • 新中地三维GIS开发智慧城市效果和应用场景
    近年来,随着科技的发展和城市化进程的加速,智慧城市成为了全球各大城市的一个重要发展方向。在这一背景下,三维GIS技术以其独特的优势,成为构建智慧城市不可或缺的工具。新中地GIS开发特训营正是在这样的大环境下应运而生,旨在培养一批能够运用三维GIS技术,打造出逼真智慧城市场景的......