本文整理汇总了C#中Hare.Normalize方法的典型用法代码示例。如果您正苦于以下问题:C# Hare.Normalize方法的具体用法?C# Hare.Normalize怎么用?C# Hare.Normalize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Hare
的用法示例。
在下文中一共展示了Hare.Normalize方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Scatter_VeryLate
public override void Scatter_VeryLate(ref OctaveRay Ray, ref Random rand, Hare.Geometry.Vector Normal, double Cos_Theta)
{
if (rand.NextDouble() < Scattering_Coefficient[Ray.Octave, 1])
{
Hare.Geometry.Vector diffx;
Hare.Geometry.Vector diffy;
Hare.Geometry.Vector diffz;
double proj;
//Check that the ray and the normal are both on the same side...
if (Cos_Theta > 0) Normal *= -1;
diffz = Normal;
diffx = new Hare.Geometry.Vector(0, 0, 1);
proj = Math.Abs(Hare.Geometry.Hare_math.Dot(diffz, diffx));
if (0.99 < proj && 1.01 > proj) diffx = new Hare.Geometry.Vector(1, 0, 0);
diffy = Hare.Geometry.Hare_math.Cross(diffz, diffx);
diffx = Hare.Geometry.Hare_math.Cross(diffy, diffz);
diffx.Normalize();
diffy.Normalize();
diffz.Normalize();
double u1;
double u2;
double x;
double y;
double z;
Hare.Geometry.Vector vect;
u1 = 2.0 * Math.PI * rand.NextDouble();
// random azimuth
double Scat_Mod = rand.NextDouble();
u2 = Math.Acos(Scat_Mod);
// random zenith (elevation)
x = Math.Cos(u1) * Math.Sin(u2);
y = Math.Sin(u1) * Math.Sin(u2);
z = Math.Cos(u2);
vect = (diffx * x) + (diffy * y) + (diffz * z);
vect.Normalize();
//Return the new direction
Ray.direction = vect;
}
else
{
//Specular Reflection
Ray.direction -= Normal * Cos_Theta * 2;
}
}
示例2: Scatter_Late
public override void Scatter_Late(ref OctaveRay Ray, ref Queue<OctaveRay> Rays, ref Random rand, Hare.Geometry.Vector Normal, double Cos_Theta)
{
double scat_sel = rand.NextDouble();
if (scat_sel > Scattering_Coefficient[Ray.Octave, 2])
{
// Specular Reflection
Ray.direction -= Normal * Cos_Theta * 2;
return;
}
else if (scat_sel > Scattering_Coefficient[Ray.Octave, 0])
{
//Only for a certain portion of high benefit cases--
//// a. Create new source for scattered energy (E * Scattering).
//// b. Modify E (E * 1 - Scattering).
//Create a new ray...
OctaveRay tr = Ray.SplitRay(1 - Scattering_Coefficient[Ray.Octave,1]);
// this is the specular reflection. Save it for later.
tr.direction -= Normal * Cos_Theta * 2;
if (tr.t_sum == 0)
{
Rhino.RhinoApp.Write("Something's up!");
}
Rays.Enqueue(tr);
}
//If we are here, the original ray needs a scattered direction:
Hare.Geometry.Vector diffx;
Hare.Geometry.Vector diffy;
Hare.Geometry.Vector diffz;
double proj;
//Check that the ray and the normal are both on the same side...
if (Cos_Theta > 0) Normal *= -1;
diffz = Normal;
diffx = new Hare.Geometry.Vector(0, 0, 1);
proj = Math.Abs(Hare.Geometry.Hare_math.Dot(diffz, diffx));
if (0.99 < proj && 1.01 > proj) diffx = new Hare.Geometry.Vector(1, 0, 0);
diffy = Hare.Geometry.Hare_math.Cross(diffz, diffx);
diffx = Hare.Geometry.Hare_math.Cross(diffy, diffz);
diffx.Normalize();
diffy.Normalize();
diffz.Normalize();
double u1;
double u2;
double x;
double y;
double z;
Hare.Geometry.Vector vect;
u1 = 2.0 * Math.PI * rand.NextDouble();
// random azimuth
double Scat_Mod = rand.NextDouble();
u2 = Math.Acos(Scat_Mod);
// random zenith (elevation)
x = Math.Cos(u1) * Math.Sin(u2);
y = Math.Sin(u1) * Math.Sin(u2);
z = Math.Cos(u2);
vect = (diffx * x) + (diffy * y) + (diffz * z);
vect.Normalize();
//Return the new direction
Ray.direction = vect;
}
示例3: Scatter_Early
public override void Scatter_Early(ref BroadRay Ray, ref Queue<OctaveRay> Rays, ref Random rand, Hare.Geometry.Vector Normal, double Cos_Theta)
{
double roughness_chance = rand.NextDouble();
if (Cos_Theta > 0)
{
Normal *= -1;
Cos_Theta *= -1;
}
foreach (int oct in Ray.Octaves)
{
// 3. Apply Scattering.
//// a. Create new source for scattered energy (E * Scattering).
//// b. Modify E (E * 1 - Scattering).
OctaveRay R = Ray.SplitRay(oct, Scattering_Coefficient[oct, 1]);
Hare.Geometry.Vector diffx;
Hare.Geometry.Vector diffy;
Hare.Geometry.Vector diffz;
double proj;
//Check that the ray and the normal are both on the same side...
diffz = Normal;
diffx = new Hare.Geometry.Vector(0, 0, 1);
proj = Math.Abs(Hare.Geometry.Hare_math.Dot(diffz, diffx));
if (0.99 < proj && 1.01 > proj) diffx = new Hare.Geometry.Vector(1, 0, 0);
diffy = Hare.Geometry.Hare_math.Cross(diffz, diffx);
diffx = Hare.Geometry.Hare_math.Cross(diffy, diffz);
diffx.Normalize();
diffy.Normalize();
diffz.Normalize();
double u1;
double u2;
double x;
double y;
double z;
Hare.Geometry.Vector vect;
u1 = 2.0 * Math.PI * rand.NextDouble();
// random azimuth
double Scat_Mod = rand.NextDouble();
u2 = Math.Acos(Scat_Mod);
// random zenith (elevation)
x = Math.Cos(u1) * Math.Sin(u2);
y = Math.Sin(u1) * Math.Sin(u2);
z = Math.Cos(u2);
vect = (diffx * x) + (diffy * y) + (diffz * z);
vect.Normalize();
//Return the new direction
R.direction = vect;
if (R.t_sum == 0)
{
Rhino.RhinoApp.Write("Something's up!");
}
Rays.Enqueue(R);
}
Ray.direction -= Normal * Cos_Theta * 2;
}