public void CalculateVelocityField() { VelocityField.Clear(); Vector3 prevPos = P0.transform.position; for (int c = 1; c <= Resolution; c++) { float t = (float)c / Resolution; Vector3 currPos = CurveMath.CalculateBezierPoint(t, P0.transform.position, P0_Tangent.transform.position, P1_Tangent.transform.position, P1.transform.position); Vector3 currTan = (currPos - prevPos).normalized; float mag = VelocityMagCurve.Evaluate(t); VelocityFieldNode ti = new VelocityFieldNode(); ti.TargetPosition = prevPos; ti.TargetVelocity = currTan; ti.Mag = mag; VelocityField.Add(ti); prevPos = currPos; } }
public void TestVelocityField() { ///Shear Flow ///(-U(y - height) ,0) VelocityField stream = CommonVelocityFields.UniformStream; CommonVelocityFields.FlowStrength = 3; Particle p = new Particle(5, new Vector(5, 5)); p.ApplyVelocityField(stream); p.Move(5); Vector result = p.Position; //flow strength 3, so should move 15 in x direction Vector expected = new Vector(20, 5); Assert.AreEqual(expected, result); }
private void FlowPicker_SelectedIndexChanged(object sender, EventArgs e) { Picker picker = (Picker)sender; int selectedIndex = picker.SelectedIndex; if (selectedIndex != -1) { VelocityField field = (picker.ItemsSource[selectedIndex] as VelocityFieldListItem)?.Field; foreach (FluidSimParticle p in _particles) { p.Particle.ApplyVelocityField(field); } foreach (FluidSimParticle p in _touchParticles) { p.Particle.ApplyVelocityField(field); } this.SelectedVelocityField = field; SetUserControls(); } }
public void ClearVelocityField() { VelocityField = new VelocityField(); }
public void ApplyVelocityField(VelocityField f) { VelocityField = f; }
public VelocityFieldListItem(string name, VelocityField v) { this.Name = name; this.Field = v; }