public EdgeSource(int[] attr_in, Hare.Geometry.Point PtZ0, Hare.Geometry.Point _PtZ, Vector[] _Tangents) { attr = attr_in; Tangent = _Tangents; Z_Norm = _PtZ - PtZ0; Z_Range = Z_Norm.Length(); Z_dot = Z_Range * Z_Range;//Hare_math.Dot(Z_Norm, Z_Norm); Z_Norm /= Z_Range; Z_Range_2 = Z_Range / 2; Z_mid = (PtZ0 + _PtZ) / 2; Vector Bisector = (Tangent[0] + Tangent[1]) / 2; Bisector.Normalize(); double BisectAngle = Math.Acos(Hare_math.Dot(Tangent[0], Bisector)); if (BisectAngle == 0) { BisectAngle = 1E-12; } v = new double[2] { Math.PI / (2 * BisectAngle), Math.PI / (Utilities.Numerics.PiX2 - 2 * BisectAngle) }; v_4pi = new double[2] { v[0] / (4 * Math.PI), v[1] / (4 * Math.PI) }; v_2pi = new double[2] { v[0] / (2 * Math.PI), v[1] / (2 * Math.PI) }; Normal[0] = Hare_math.Cross(_Tangents[0], Z_Norm); Normal[1] = Hare_math.Cross(_Tangents[1], Z_Norm * -1); if (Hare_math.Dot(Normal[0], Bisector) > 0) { Normal[0] *= -1; Normal[1] *= -1; } //////////////////////////// //VisCheck// Rhino.Geometry.Point3d pt = new Rhino.Geometry.Point3d(Z_mid.x, Z_mid.y, Z_mid.z); Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Normal[0].x, Normal[0].y, Normal[0].z)); Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Normal[1].x, Normal[1].y, Normal[1].z)); //Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Tangent[0].x, Tangent[0].y, Tangent[0].z)); //Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Tangent[1].x, Tangent[1].y, Tangent[1].z)); //////Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(new Rhino.Geometry.Point3d(Z_mid.x, Z_mid.y, Z_mid.z)); }
public EdgeSource(int[] attr_in, Hare.Geometry.Point PtZ0, Hare.Geometry.Point _PtZ, Vector[] _Tangents) { attr = attr_in; Tangent = _Tangents; Z_Norm = _PtZ - PtZ0; Z_Range = Z_Norm.Length(); Z_dot = Z_Range * Z_Range;//Hare_math.Dot(Z_Norm, Z_Norm); Z_Norm /= Z_Range; Z_Range_2 = Z_Range / 2; Z_mid = (PtZ0 + _PtZ) / 2; Vector Bisector = (Tangent[0] + Tangent[1]) / 2; Bisector.Normalize(); double BisectAngle = Math.Acos(Hare_math.Dot(Tangent[0], Bisector)); if (BisectAngle == 0) { BisectAngle = 1E-12; } v = new double[2] { Math.PI / (2 * BisectAngle), Math.PI / (Utilities.Numerics.PiX2 - 2 * BisectAngle) }; v_4pi = new double[2] { v[0] / (4 * Math.PI), v[1] / (4 * Math.PI) }; v_2pi = new double[2] { v[0] / (2 * Math.PI), v[1] / (2 * Math.PI) }; Normal[0] = Hare_math.Cross(_Tangents[0], Z_Norm); Normal[1] = Hare_math.Cross(_Tangents[1], Z_Norm * -1); if (Hare_math.Dot(Normal[0], Bisector) > 0) { Normal[0] *= -1; Normal[1] *= -1; } }
private bool Check_Validity(Point p, int rec_id, int rnd, out double dist) { Hare.Geometry.Vector d = RecMain.Origin(rec_id) - p; dist = d.Length(); d.Normalize(); Ray R = new Ray(Source.H_Origin(), d, 0, rnd); double x1 = 0, x2 = 0; double t; int x3 = 0; Point x4; while (true) { if (Room.shoot(R, out x1, out x2, out x3, out x4, out t)) { return(t >= dist); } else { return(true); } } }
public EdgeSource(int[] attr_in, Hare.Geometry.Point PtZ0, Hare.Geometry.Point _PtZ, Vector[] _Tangents) { attr = attr_in; Tangent = _Tangents; Z_Norm = _PtZ - PtZ0; Z_Range = Z_Norm.Length(); Z_dot = Z_Range * Z_Range;//Hare_math.Dot(Z_Norm, Z_Norm); Z_Norm/= Z_Range; Z_Range_2 = Z_Range / 2; Z_mid = (PtZ0 + _PtZ) / 2; Vector Bisector = (Tangent[0] + Tangent[1])/2; Bisector.Normalize(); double BisectAngle = Math.Acos(Hare_math.Dot(Tangent[0], Bisector)); if (BisectAngle == 0) BisectAngle = 1E-12; v = new double[2] { Math.PI / (2 * BisectAngle), Math.PI / (Utilities.Numerics.PiX2 - 2 * BisectAngle) }; v_4pi = new double[2] { v[0] / (4 * Math.PI), v[1] / (4 * Math.PI) }; v_2pi = new double[2] { v[0] / (2 * Math.PI), v[1] / (2 * Math.PI) }; Normal[0] = Hare_math.Cross(_Tangents[0], Z_Norm); Normal[1] = Hare_math.Cross(_Tangents[1], Z_Norm*-1); if(Hare_math.Dot(Normal[0], Bisector) > 0) { Normal[0] *= -1; Normal[1] *= -1; } //////////////////////////// //VisCheck// Rhino.Geometry.Point3d pt = new Rhino.Geometry.Point3d(Z_mid.x, Z_mid.y, Z_mid.z); Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Normal[0].x, Normal[0].y, Normal[0].z)); Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Normal[1].x, Normal[1].y, Normal[1].z)); //Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Tangent[0].x, Tangent[0].y, Tangent[0].z)); //Rhino.RhinoDoc.ActiveDoc.Objects.AddLine(pt, pt + new Rhino.Geometry.Point3d(Tangent[1].x, Tangent[1].y, Tangent[1].z)); //////Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(new Rhino.Geometry.Point3d(Z_mid.x, Z_mid.y, Z_mid.z)); }