我在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 !!!!!!!
}
}
}
答案 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