/* * @Author: Xu.Wang * @Date: 2020-04-05 20:58:19 * @Last Modified by: Xu.Wang * @Last Modified time: 2020-04-05 23:42:19 */ import { Vector } from './vector' export class Vector2 extends Vector { constructor(e1: number, e2: number) { super(2, new Array(e1, e2)) } x() { return this.data()[0] } y() { return this.data()[1] } iset(v2: Vector2) { this.data()[0] = v2.x() this.data()[1] = v2.y() } set(v2: Vector2): boolean { return super.set(new Vector(3, v2.data())) } add(v2: any): Vector2 { let addv = super.add(v2) return new Vector2(addv.data()[0], addv.data()[1]) } sub(v2: any): Vector2 { let subv = super.sub(v2) return new Vector2(subv.data()[0], subv.data()[1]) } mul(v2: any): Vector2 { let mulv = super.mul(v2) return new Vector2(mulv.data()[0], mulv.data()[1]) } div(v2: any): Vector2 { let divv = super.div(v2) return new Vector2(divv.data()[0], divv.data()[1]) } rdiv(v2: any): Vector2 { let divv = super.rdiv(v2) return new Vector2(divv.data()[0], divv.data()[1]) } dot(v2: Vector2): number { return super.dot(new Vector(2, v2.data())) } cross(v2: Vector2): number { return this.x() * v2.y() - this.y() * v2.x() } normalize() { super.normalize() } normalized(): Vector2 { let norm = super.normalized() return new Vector2(norm.data()[0], norm.data()[1]) } tangential(): Vector2 { return new Vector2(this.y(), -this.x()) } }