All files / src/elements/circle InvertCircleElement.ts

100% Statements 60/60
100% Branches 4/4
100% Functions 4/4
100% Lines 60/60

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 611x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 11x 11x 11x 11x 11x 11x 11x 1x 1x 3x 3x 3x 1x 1x 1x 1x 1x 1x  
/*----------------------------------------------------------------------+
|    Title:	InvertCircleElement.ts                                      |
|    Originally: InvertCircle.java                                      |
|    A port of the software Geometry Applet by                          |
|    Author:    David E. Joyce                                          |
|        Department of Mathematics and Computer Science                 |
|        Clark University                                               |
|        Worcester, MA 01610-1477                                       |
|        U.S.A.                                                         |
|                                                                       |
|        http://aleph0.clarku.edu/~djoyce/home.html                     |
|        djoyce@clarku.edu                                              |
|                                                                       |
|    Date:    February, 1996.   Version 2.0.0 May, 1997.                |
|    TypeScript Port: 2026, Nelson Brown, brownnrl@gmail.com            |
|                           https://www.nelsonbrown.net/                |
+----------------------------------------------------------------------*/
 
import {CircleElement} from "./CircleElement";
import {PointElement} from "../point/PointElement";
 
export class InvertCircleElement extends CircleElement {
  /*--------------------------------------------------------------------+
  | Invert the circle C in the circle D to get this circle.  It is      |
  | assumed that C and D lie in the same plane C.AP.                    |
  +--------------------------------------------------------------------*/
 
  private _C: CircleElement;
  private _D: CircleElement;
 
  constructor(C: CircleElement, D: CircleElement) {
    super();
    this.dimension = 2;
    this._C = C;
    this._D = D;
    this.AP = C.AP;
    this.Center = new PointElement({AP: this.AP});
    this.A = this.Center;
    this.B = new PointElement({AP: this.AP});
  }
 
  public update() {
    let d2 = this._C.Center.distance2(this._D.Center);
    let r2 = this._C.radius2;
    let factor = this._D.radius2 / (d2 - r2);
    this.Center.to(this._C.Center).minus(this._D.Center).times(factor).plus(this._D.Center);
    factor = 1.0 + Math.sqrt(r2 / d2);
    this.B.to(this.Center).minus(this._D.Center).times(factor).plus(this._D.Center);
  }
 
  public translate(dx: number, dy: number) {
    this.Center.translate(dx, dy);
    this.B.translate(dx, dy);
  }
 
  public rotate(pivot: PointElement, ac: number, as: number) {
    this.Center.rotate(pivot, ac, as);
    this.B.rotate(pivot, ac, as);
  }
}