Example #1
0
		/// <summary>
		/// Arco per punti estremi e centro oppure terzo punto.
		/// Mantiene invariati gli oggetti pIni e pFin
		/// </summary>
		/// <param name="pIni">punto iniziale (mantenuto invariato)</param>
		/// <param name="pFin">punto finale (mantenuto invariato)</param>
		/// <param name="pCenter_or_3dPoint">centro o terzo punti</param>
		/// <param name="trepunti">TrePunti.tipo</param>
		public Arc2D(Point2D pIni, Point2D pFin, Point2D pCenter_or_3dPoint, TrePunti trepunti)  : base(typeof(Arc2D))
			{
			if(trepunti == TrePunti.Estremi_e_Centro)
				{
				this.pIni = pIni;												// Imposta gli estremi...
				this.pFin = pFin;												// ...e non li cambia piu`
				Point2D mid = 0.5 * (pIni + pFin);								// Punto medio
				Point2D norm = (pFin - pIni).Normal();							// Normale
				double rIni = (pIni - pCenter_or_3dPoint).Mod();
				double rFin = (pFin - pCenter_or_3dPoint).Mod();
				double d12 = 0.5 * ((pFin - pIni).Mod());						// Meta` lunghezza
				this.radius = 0.5 * (rIni + rFin);								// Raggio (medio)
				double apo = Math.Sqrt( radius*radius - d12*d12 );				// Apotema
				this.pCenter = mid + (apo * Math.Sign(norm^(pCenter_or_3dPoint-mid))) * norm;	// Centro
				Point2D dirIni = pIni - this.pCenter;								// Direzioni dei punti
				Point2D dirFin = pFin - this.pCenter;
				alfaIni = dirIni.Alfa();										// Calcola gli angoli
				alfaFin = dirFin.Alfa();
				Validate();
				}
			else if(trepunti == TrePunti.Tre_Punti)
				{
				throw new Exception("Construttore non completamente implementato");
				}
			}
Example #2
0
		/// <summary>
		/// Arco per centro e due punti
		/// </summary>
		/// <param name="center">Centro</param>
		/// <param name="radius">Raggio (opzionale)</param>
		/// <param name="pIni">Punto iniziale</param>
		/// <param name="pFin">Punto finale</param>
		/// <param name="useRadius">true: usa il raggio, false: lo calcola in base ai punti</param>
		public Arc2D(Point2D center, double radius, Point2D pIni, Point2D pFin, bool useRadius) : base(typeof(Arc2D)) 
			{
			this.pCenter = center;
			Point2D dirIni = pIni - center;						// Direzioni dei punti
			Point2D dirFin = pFin - center;
			double rIni = dirIni.Mod();							// Calcola i moduli
			double rFin = dirFin.Mod();
			if(useRadius)
				{
				this.radius = radius;
				}
			else
				{
				this.radius = (rIni + rFin)*0.5;		// Calcola raggio medio
				}
			alfaIni = dirIni.Alfa();					// Calcola gli angoli
			alfaFin = dirFin.Alfa();
			dirIni.Normalize();		 					// Normalizza le direzioni
			dirFin.Normalize();
			this.pIni = center + this.radius * dirIni;		// Calcola i punti senza usare gli angoli, imprecisi
			this.pFin = center + this.radius * dirFin;
			Validate();
			}
Example #3
0
		/// <summary>Costruttore di copia</summary>
		/// <param name="sorgente"></param>
		public SorgenteOttica(SorgenteOttica sorgente) : base(sorgente.Nome)	
			{
			this.tipoSorgente = sorgente.tipoSorgente;
			this.arco = sorgente.arco;
			this.diametro = sorgente.diametro;
			this.divergenza = sorgente.divergenza;
			this.lambda = sorgente.lambda;
			this.nraggi = sorgente.nraggi;
			this.lineaRaggio = sorgente.lineaRaggio;
			Validate();
			}
Example #4
0
		/// <summary>
		/// Arco
		/// </summary>
		public Arc2D() : base(typeof(Arc2D)) 
			{
			pCenter = null;
			radius = 0.0;
			alfaIni = alfaFin = 0.0;
			bCircle = false;
			pIni = null;
			pFin = null;
			bValid = false;
			}
Example #5
0
		/// <summary>Costruttore vuoto</summary>
		public SorgenteOttica() : base()
			{
			tipoSorgente = TipoSorgente.collimata;
			lineaRaggio = new Line2D();
			divergenza = new Angolo(0.0);
			Validate();
			}