public g3Line vertical(g3RowVec point) // must be moved to g2Line, only for testing, all z-Values must be 0 for testing { g3Line ret = new g3Line(this); ret.ePoint.x = point.x + dir.y; ret.ePoint.y = point.y - dir.x; ret.init(point, ret.ePoint); return(ret); }
public g3Line parallel(double dist) // must be moved to g2Line, only for testing, all z-Values must be 0 for testing { g3Line ret = new g3Line(this); ret.sPoint.y = sPoint.y + Math.Sqrt(dir.x * dir.x + dir.y * dir.y) * dist / dir.x; ret.ePoint.x = ret.sPoint.x + dir.x; ret.ePoint.y = ret.sPoint.y + dir.y; ret.ePoint.z = ret.sPoint.z + dir.z; ret.pnt.x = ret.sPoint.x; ret.pnt.y = ret.sPoint.y; ret.pnt.z = ret.sPoint.z; return(ret); }
} // must be moved to g2Line, only for testing, all z-Values must be 0 for testing private static void selfTest() { selfTested = true; g3Line g = new g3Line(new g3RowVec(0, 0, 0), new g3RowVec(1, 1, 0)); ass(g.At((Math.Sqrt(2))).x == 1); ass(g.At((Math.Sqrt(2))).y == 1); g3Line h = new g3Line(new g3RowVec(0, 2, 0), new g3RowVec(2, 0, 0)); g3ColVec s = h.InterSect(g); ass(s[1, 1, 1] == 1); ass(s[1, 2, 1] == 1); ass(s[1, 3, 1] == 0); ass(h.yAt(2) == 0); ass(h.xAt(1) == 1); ass(h.parallel(Math.Sqrt(2) / 2).yAt(3) == 0); }
public g3Line(g3Line cloneFrom) { init(new g3RowVec(cloneFrom.sPoint), new g3RowVec(cloneFrom.ePoint)); }
public g3ColVec InterSect(g3Line second) { return(second.At((dir[1, 2, 1] * pnt[1, 1, 1] - dir[1, 1, 1] * pnt[1, 2, 1] + dir[1, 1, 1] * second.pnt[1, 2, 1] - dir[1, 2, 1] * second.pnt[1, 1, 1]) / (dir[1, 2, 1] * second.dir[1, 1, 1] - dir[1, 1, 1] * second.dir[1, 2, 1]))); }