public void Presek(Krug k1, Tacka[] Tacke, ObjekatInfo[] Objekti) { if (Math.Abs(this.Centar.Y - k1.C.Y) < GeoGebra.eps) { if (Math.Abs(this.Centar.X - k1.C.X) < GeoGebra.eps) { return; } double x = (this.R * this.R - k1.R * k1.R + k1.Centar.X * k1.Centar.X - this.Centar.X * this.Centar.X) / (2 * (k1.Centar.X - this.Centar.X)); double b = (-2) * this.Centar.Y; double c = (x - this.Centar.X) * (x - this.Centar.X) - this.R * this.R; if (b * b - 4 * c < 0) { return; } if (b * b - 4 * c < GeoGebra.eps) { GeoGebra.DodajTacku(new Tacka(x, (-b) / 2, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); } else { double y = (-b + Math.Sqrt(b * b - 4 * c)) / 2; GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); y = (-b - Math.Sqrt(b * b - 4 * c)) / 2; GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); return; } } double k = (this.Centar.X - k1.Centar.X) / (k1.Centar.Y - this.Centar.Y); double n = (this.R * this.R - k1.R * k1.R + k1.Centar.X * k1.Centar.X - this.Centar.X * this.Centar.X + k1.Centar.Y * k1.Centar.Y - this.Centar.Y * this.Centar.Y) / (2 * (k1.Centar.Y - this.Centar.Y)); Prava p = new Prava(k, n, ""); this.Presek(p, Tacke, Objekti); }
public void Presek(Prava p, Tacka[] Tacke, ObjekatInfo[] Objekti) { if (this.Centar.Rastojanje(p) - this.R > GeoGebra.eps) { return; } double a = 1 + p.K * p.K; double b = -2 * this.Centar.X + 2 * p.K * p.N - 2 * p.K * this.Centar.Y; double c = this.Centar.X * this.Centar.X + p.N * p.N + this.Centar.Y * this.Centar.Y - 2 * p.N * this.Centar.Y - this.R * this.R; if (Math.Abs(this.Centar.Rastojanje(p) - this.R) < GeoGebra.eps) { double x = (-b) / (2 * a); double y = p.K * x + p.N; GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); return; } if (this.R - this.Centar.Rastojanje(p) > GeoGebra.eps) { double x = ((-b) + Math.Sqrt(b * b - 4 * a * c)) / (2 * a); double y = p.K * x + p.N; GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); x = ((-b) - Math.Sqrt(b * b - 4 * a * c)) / (2 * a); y = p.K * x + p.N; GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti); return; } }
public virtual Tacka Presek(Prava p) { if (Math.Abs(this.K - p.K) < GeoGebra.eps) { return(null); } return(new Tacka((p.N - this.N) / (this.K - p.K), (this.K * p.N - p.K * this.N) / (this.K - p.K), "A" + (Tacka.NT + 1).ToString(), Color.DarkGray)); }
public double Ugao(Prava p) { if ((Math.Abs(this.K - p.K) < GeoGebra.eps) && (Math.Abs(this.N - p.N) < GeoGebra.eps)) { return(0); } if (Math.Abs(this.K - p.K) < GeoGebra.eps) { return(-1); } return(Math.Round(Math.Min(Math.Abs(Math.Atan(this.K) - Math.Atan(p.K)), Math.PI - Math.Abs(Math.Atan(this.K) - Math.Atan(p.K))) * 360 / (2 * Math.PI), 2)); }
public Prava SimetralaUgla(Prava p) { if (this.Presek(p) == null) { return(null); } if (this.K < p.K) { double k1 = Math.Tan((Math.Atan(this.K) + Math.Atan(p.K)) / 2); double n1 = this.Presek(p).Y - k1 * this.Presek(p).X; return(new Prava(k1, n1, "p" + (Prava.NP + 1).ToString())); } else { double k2 = Math.Tan(Math.PI / 2 + (Math.Atan(this.K) + Math.Atan(p.K)) / 2); double n2 = this.Presek(p).Y - k2 * this.Presek(p).X; return(new Prava(k2, n2, "p" + (Prava.NP + 1).ToString())); } }
public Krug Refleksija(Prava p) { return(new Krug(this.Centar.Refleksija(p), this.R, "k" + (NK + 1).ToString())); }
public Krug InverzijaNeProlazi(Prava p) { return(new Krug(this.Centar, this.Inverzija(new Tacka(0, p.N, "", Color.Black)), this.Inverzija(new Tacka(1, p.K + p.N, "", Color.Black)), "k" + (Krug.NK + 1).ToString())); }
public Prava InverzijaProlazi(Prava p) { return(new Prava(p.K, p.N, (Prava.NP + 1).ToString())); }
public Duz Refleksija(Prava p, Tacka[] Tacke, ObjekatInfo[] Objekti) { GeoGebra.DodajTacku(this.Tacka1.Refleksija(p), Tacke, Objekti); GeoGebra.DodajTacku(this.Tacka2.Refleksija(p), Tacke, Objekti); return(new Duz(Tacke[Tacka.NT - 2], Tacke[Tacka.NT - 1])); }
public override Tacka Presek(Prava p) { return(p.Presek(this)); }
public Prava Refleksija(Prava p) { return(new Prava((new Tacka(0, this.N, "", Color.Black)).Refleksija(p), (new Tacka(1, this.N + this.K, "", Color.Black)).Refleksija(p), "p" + (Prava.NP + 1).ToString())); }