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 для именования функций и переменных.
spam lang_mismatch quality