Vector3D.Normalize()有时不起作用

时间:2018-08-11 20:37:06

标签: c# visual-studio vector 3d

我在C#中使用Vector3D.Normalize()比较不同的向量。 在某些情况下,它不起作用。 因此,我做了一个简单的示例只是为了展示(不是最佳编码)。 如何在不使用Test2这样的附加向量的情况下克服这一问题?

using System;
using System.Windows.Media.Media3D;

namespace Vecktor3D_Normalize_test
{
    class Program
    {
        static void Main(string[] args)
        {
            Vektor myVek = new Vektor();
            Vector3D myvector0 = new Vector3D(0.7, 0.5, 0.3);
            myVek.Test2(myvector0);
            Console.WriteLine("Test 2 " + myVek.myvector2);
            myVek.Test3(myvector0);
            Console.WriteLine("Test 3 " + myVek.myvector3);
            Console.WriteLine("Test 0 " + myvector0);
            myvector0.Normalize();
            Console.WriteLine("Test 1 " + myvector0);

            Console.ReadLine();
        }
    }
    class Vektor
    {
        public Vector3D myvector2 { get; set; }
        public Vector3D myvector3 { get; set; }
        public void Test2(Vector3D Input)
        {
            Vector3D myvector4 = Input;
            myvector4.Normalize(); // myvector4 is normalized !!!!!!
            myvector2 = myvector4;
        }
        public void Test3(Vector3D Input)
        {
            myvector3 = Input;
            myvector3.Normalize(); // myvector3 is not normalized !!!!!!!
        }
    }
}

1 个答案:

答案 0 :(得分:1)

User::whereHas('message_subject', function ($query) { $query->with('messages' => function ($q) { $q->latest()->limit(1); }); })->get(); Vector3D,因此默认情况下按值传递。

这意味着struct仅规范化从myvector3.Normalize函数获得的myvector3副本,而不是get本身(或更确切地说,存储属性myvector3的值的基础隐藏成员变量。因此,在用属性替换成员变量时必须小心。

出于相同的原因,您可以改为在myvector3上致电Normalize

Input