All files / src/elements/line PlanePerpendicularLine.ts

100% Statements 71/71
80% Branches 4/5
100% Functions 4/4
100% Lines 71/71

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 61 62 63 64 65 66 67 68 69 70 71 721x 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 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 1x 1x 2x 2x 2x 1x 1x 3x 3x 3x 1x 1x 299x 299x 299x 299x 1x  
/*----------------------------------------------------------------------+
|    Title:	PlanePerpendicularLine.ts                                   |
|    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: 2023, Nelson Brown, brownnrl@gmail.com            |
|                           https://www.nelsonbrown.net/                |
+----------------------------------------------------------------------*/
 
import {PointElement} from "../point/PointElement";
import {SlateCanvas} from "../../Slate";
import {LineElement} from "./LineElement";
import {PlaneElement} from "../plane/PlaneElement";
import {IPerpendicularElementConstructor} from "./Perpendicular";
 
export interface IPlanePerpendicularLineConstructor {
    C : PointElement;
    P : PlaneElement;
    D : PointElement;
    E : PointElement;
}
 
export class PlanePerpendicularLine extends LineElement {
  
    // draw perpendicular at C to the plane P.  A is the proj of C onto P, while
    // AB is perpendicular to P and equal to DE
 
    protected _C : PointElement;
    protected _P : PlaneElement;
    protected _D : PointElement;
    protected _E : PointElement;
    
    // The line AB will be perpendicular to the plane P.  A will be the projection
    // of C on to the plane P.  AB will equal DE.
 
    constructor(ipe?: IPlanePerpendicularLineConstructor) {
        super();
        this.dimension = 1;
        if(ipe == null) return;
        this._A = new PointElement({AP: ipe.P});
        this._B = new PointElement();
        this._C = ipe.C;
        this._D = ipe.D;
        this._E = ipe.E;
        this._P = ipe.P;
    }
 
    public rotate(pivot: PointElement, ac: number, as: number): void {
        this.A.rotate(pivot, ac, as);
        this.B.rotate(pivot, ac, as);
    }
 
    public translate(dx: number, dy: number): void {
        this.A.translate(dx,dy);
        this.B.translate(dx,dy);
    }
 
    public update(): void {
        this._A.to(this._C).toPlane(this._P);
        this._B.toCross(this._P.S, this._P.T);
        this._B.times(this._D.distance(this._E)).plus(this._A)
    }
}