use std::f32::sqrt;

struct Matrix3 {
    x: [[f32; 3]; 3],
}

struct Point3 {
    x: f32,
    y: f32,
    z: f32,
}

fn matrix_from_normal(normal: &Point3) -> Matrix3 {
    let mut result = Matrix3 { x: [[0.0; 3]; 3] };

    let length = sqrt(normal.x * normal.x + normal.y * normal.y + normal.z * normal.z);
    let inv_length = 1.0 / length;

    result.x[0][0] = normal.x * inv_length;
    result.x[0][1] = normal.y * inv_length;
    result.x[0][2] = normal.z * inv_length;

    result.x[1][0] = -normal.y * inv_length;
    result.x[1][1] = normal.x * inv_length;
    result.x[1][2] = 0.0;

    result.x[2][0] = -normal.z * inv_length;
    result.x[2][1] = 0.0;
    result.x[2][2] = normal.x * inv_length;

    return result;
}

Примечание: в Rust не существует неявного приведения типов, поэтому типы переменных в функции matrix_from_normal указаны явно. Кроме того, в Rust обычно используется snake_case для именования функций и переменных.
ใช้ std::f32::sqrt; struct Matrix3 { x: [[f32; 3]; 3], } struct Point3 { x: f32, y: f32, z: f32, } fn matrix_from_normal(ปกติ: &Point3) -> Matrix3 { ให้ผลลัพธ์ mut = Matrix3 { x: [[0.0; 3]; 3] }; ให้ความยาว = sqrt (normal.x * Normal.x + Normal.y * Normal.y + Normal.z * Normal.z); ให้ inv_length = 1.0 / ความยาว; result.x[0][0] = ปกติ.x * inv_length; result.x[0][1] = Normal.y * inv_length; result.x[0][2] = ปกติ.z * inv_length; result.x[1][0] = -normal.y * inv_length; result.x[1][1] = ปกติ.x * inv_length; ผลลัพธ์ x[1] [2] = 0.0; result.x[2][0] = -normal.z * inv_length; ผลลัพธ์.x[2][1] = 0.0; result.x[2][2] = ปกติ.x * inv_length; ส่งคืนผลลัพธ์; } หมายเหตุ: ไม่มีการหล่อโดยนัยใน Rust ดังนั้นจึงมีการระบุประเภทตัวแปรในฟังก์ชัน matrix_from_normal ไว้อย่างชัดเจน นอกจากนี้ โดยทั่วไปแล้ว Rust จะใช้ Snake_case เพื่อตั้งชื่อฟังก์ชันและตัวแปร
spam lang_mismatch quality