public override bool IsOnGround(SolidRectangle incRect) { float distanceBetween = CenterY - incRect.CenterY; if (Radius + incRect.Height / 2 <= Math.Abs(distanceBetween) + ERROR_RATE && Radius + incRect.Height / 2 >= Math.Abs(distanceBetween) - ERROR_RATE) { mCurrentState = ArcanianState.ArcanianResting; return true; } else return false; }
public void ThreeNodeBeam() { FiniteElementModel model = new FiniteElementModel(ModelType.Full3D); FiniteElementNode node1 = model.NodeFactory.Create(0,0,0); model.ConstrainNode(node1, DegreeOfFreedom.X); model.ConstrainNode(node1, DegreeOfFreedom.Y); model.ConstrainNode(node1, DegreeOfFreedom.Z); model.ConstrainNode(node1, DegreeOfFreedom.XX); FiniteElementNode node2 = model.NodeFactory.Create(1,0, 0); model.ConstrainNode(node2, DegreeOfFreedom.Y); FiniteElementNode node3 = model.NodeFactory.Create(2,0, 0); model.ConstrainNode(node3, DegreeOfFreedom.Y); model.ConstrainNode(node3, DegreeOfFreedom.Z); IMaterial material = new GenericElasticMaterial(0, 10000000000, 0.3, 1000000000); ICrossSection section = new SolidRectangle(1, 1); model.ElementFactory.CreateLinear3DBeam(node1, node2, material, section); model.ElementFactory.CreateLinear3DBeam(node2,node3,material,section); ForceVector force = model.ForceFactory.Create(0, 0, -10000, 0, 0, 0); model.ApplyForceToNode(force, node2); IFiniteElementSolver solver = new MatrixInversionLinearSolver(model); Stiffness.GlobalModelStiffnessMatrixBuilder gmsmb = new SharpFE.Stiffness.GlobalModelStiffnessMatrixBuilder(model); Console.WriteLine(gmsmb.BuildKnownForcesUnknownDisplacementStiffnessMatrix()); FiniteElementResults results = solver.Solve(); DisplacementVector node1Displacement = results.GetDisplacement(node1); Console.WriteLine("node1Displacement : \n" + node1Displacement); DisplacementVector node2Displacement = results.GetDisplacement(node2); Console.WriteLine("node2Displacement : \n" + node2Displacement); DisplacementVector node3Displacement = results.GetDisplacement(node3); Console.WriteLine("node3Displacement : \n" + node3Displacement); ReactionVector node1Reaction = results.GetReaction(node1); Console.WriteLine("node1Reaction : \n" + node1Reaction); ReactionVector node3Reaction = results.GetReaction(node3); Console.WriteLine("node5Reaction : \n" + node3Reaction); Assert.AreEqual(0, node2Displacement.XX, 0.00001); Assert.AreEqual(0, node2Displacement.Y, 0.00001); Assert.AreEqual(0, node2Displacement.ZZ, 0.0001); Assert.AreEqual(-0.000002, node2Displacement.Z, 0.0000001); Assert.AreEqual(5000, node1Reaction.Z, 0.00001); Assert.AreEqual(5000, node3Reaction.Z, 0.00001); Assert.AreEqual(0, node2Displacement.YY, 0.0001); Assert.AreEqual( 0.000003, node1Displacement.YY, 0.0000001); Assert.AreEqual(-0.000003, node3Displacement.YY, 0.0000001); }
public void Calculate3DTrussOf4BarsAnd15Dof() { FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D); FiniteElementNode node1 = model.NodeFactory.Create(4, 4, 3); FiniteElementNode node2 = model.NodeFactory.Create(0, 4, 0); model.ConstrainNode(node2, DegreeOfFreedom.X); model.ConstrainNode(node2, DegreeOfFreedom.Y); model.ConstrainNode(node2, DegreeOfFreedom.Z); FiniteElementNode node3 = model.NodeFactory.Create(0, 4, 6); model.ConstrainNode(node3, DegreeOfFreedom.X); model.ConstrainNode(node3, DegreeOfFreedom.Y); model.ConstrainNode(node3, DegreeOfFreedom.Z); FiniteElementNode node4 = model.NodeFactory.Create(4, 0, 3); model.ConstrainNode(node4, DegreeOfFreedom.X); model.ConstrainNode(node4, DegreeOfFreedom.Y); model.ConstrainNode(node4, DegreeOfFreedom.Z); FiniteElementNode node5 = model.NodeFactory.Create(8, -1, 1); model.ConstrainNode(node5, DegreeOfFreedom.X); model.ConstrainNode(node5, DegreeOfFreedom.Y); model.ConstrainNode(node5, DegreeOfFreedom.Z); IMaterial material = new GenericElasticMaterial(0, 210000000000, 0, 0); ICrossSection section = new SolidRectangle(0.01, 0.01); model.ElementFactory.CreateLinearTruss(node1, node2, material, section); model.ElementFactory.CreateLinearTruss(node1, node3, material, section); model.ElementFactory.CreateLinearTruss(node1, node4, material, section); model.ElementFactory.CreateLinearTruss(node1, node5, material, section); ForceVector externalForce = model.ForceFactory.Create(0, -10000, 0, 0, 0, 0); model.ApplyForceToNode(externalForce, node1); IFiniteElementSolver solver = new MatrixInversionLinearSolver(model); FiniteElementResults results = solver.Solve(); ReactionVector reactionAtNode2 = results.GetReaction(node2); Assert.AreEqual(270.9, reactionAtNode2.X, 1); Assert.AreEqual(0, reactionAtNode2.Y, 1); Assert.AreEqual(203.2, reactionAtNode2.Z, 1); ReactionVector reactionAtNode3 = results.GetReaction(node3); Assert.AreEqual(1354.6, reactionAtNode3.X, 1); Assert.AreEqual(0, reactionAtNode3.Y, 1); Assert.AreEqual(-1016, reactionAtNode3.Z, 1); ReactionVector reactionAtNode4 = results.GetReaction(node4); Assert.AreEqual(0, reactionAtNode4.X, 1); Assert.AreEqual(7968.1, reactionAtNode4.Y, 1); Assert.AreEqual(0, reactionAtNode4.Z, 1); ReactionVector reactionAtNode5 = results.GetReaction(node5); Assert.AreEqual(-1625.5, reactionAtNode5.X, 1); Assert.AreEqual(2031.9, reactionAtNode5.Y, 1); Assert.AreEqual(812.8, reactionAtNode5.Z, 1); DisplacementVector displacementAtNode1 = results.GetDisplacement(node1); Assert.AreEqual(-0.0003024, displacementAtNode1.X, 0.0001); //NOTE the results given in the book are 1E03 Assert.AreEqual(-0.0015177, displacementAtNode1.Y, 0.0001); Assert.AreEqual(0.0002688, displacementAtNode1.Z, 0.0001); }
public void Calculate3DTrussOf3BarsAnd12Dof() { FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D); FiniteElementNode node1 = model.NodeFactory.Create(72,0,0); model.ConstrainNode(node1, DegreeOfFreedom.Y); FiniteElementNode node2 = model.NodeFactory.Create(0, 36, 0); model.ConstrainNode(node2, DegreeOfFreedom.X); model.ConstrainNode(node2, DegreeOfFreedom.Y); model.ConstrainNode(node2, DegreeOfFreedom.Z); FiniteElementNode node3 = model.NodeFactory.Create(0, 36, 72); model.ConstrainNode(node3, DegreeOfFreedom.X); model.ConstrainNode(node3, DegreeOfFreedom.Y); model.ConstrainNode(node3, DegreeOfFreedom.Z); FiniteElementNode node4 = model.NodeFactory.Create(0, 0, -48); model.ConstrainNode(node4, DegreeOfFreedom.X); model.ConstrainNode(node4, DegreeOfFreedom.Y); model.ConstrainNode(node4, DegreeOfFreedom.Z); IMaterial material = new GenericElasticMaterial(0, 1200000, 0, 0); ICrossSection section1 = new SolidRectangle(1, 0.302); ICrossSection section2 = new SolidRectangle(1, 0.729); ///NOTE example also refers to this as A1. Assume errata in book ICrossSection section3 = new SolidRectangle(1, 0.187); ///NOTE example also refers to this as A1. Assume errata in book model.ElementFactory.CreateLinearTruss(node1, node2, material, section1); model.ElementFactory.CreateLinearTruss(node1, node3, material, section2); model.ElementFactory.CreateLinearTruss(node1, node4, material, section3); ForceVector externalForce = model.ForceFactory.Create(0, 0, -1000, 0, 0, 0); model.ApplyForceToNode(externalForce, node1); IFiniteElementSolver solver = new MatrixInversionLinearSolver(model); FiniteElementResults results = solver.Solve(); ReactionVector reactionAtNode1 = results.GetReaction(node1); Assert.AreEqual(0, reactionAtNode1.X, 1); Assert.AreEqual(-223.1632, reactionAtNode1.Y, 1); Assert.AreEqual(0, reactionAtNode1.Z, 1); ReactionVector reactionAtNode2 = results.GetReaction(node2); Assert.AreEqual(256.1226, reactionAtNode2.X, 1); Assert.AreEqual(-128.0613, reactionAtNode2.Y, 1); Assert.AreEqual(0, reactionAtNode2.Z, 1); ReactionVector reactionAtNode3 = results.GetReaction(node3); Assert.AreEqual(-702.4491, reactionAtNode3.X, 1); Assert.AreEqual(351.2245, reactionAtNode3.Y, 1); Assert.AreEqual(702.4491, reactionAtNode3.Z, 1); ReactionVector reactionAtNode4 = results.GetReaction(node4); Assert.AreEqual(446.3264, reactionAtNode4.X, 1); Assert.AreEqual(0, reactionAtNode4.Y, 1); Assert.AreEqual(297.5509, reactionAtNode4.Z, 1); DisplacementVector displacementAtNode1 = results.GetDisplacement(node1); Assert.AreEqual(-0.0711, displacementAtNode1.X, 0.0001); Assert.AreEqual(0, displacementAtNode1.Y, 0.0001); Assert.AreEqual(-0.2662, displacementAtNode1.Z, 0.0001); }
private static void SetAlphaAndColorValues(SolidRectangle solidRectangle, RecursiveVariableFinder rvf) { solidRectangle.Color = ColorFromRvf(rvf); }
public void Remove(SolidRectangle solidRectangle) { mSolidRectangles.Remove(solidRectangle); Renderer.RemoveRenderable(solidRectangle); }