All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.org.jetbrains.skia.RSXform.kt Maven / Gradle / Ivy

There is a newer version: 0.8.15
Show newest version
package org.jetbrains.skia

import kotlin.math.cos
import kotlin.math.sin

/**
 *
 * A compressed form of a rotation+scale matrix.
 *
 * 
[ fSCos     -fSSin    fTx ]
 * [ fSSin      fSCos    fTy ]
 * [     0          0      1 ]
*/ class RSXform( internal val scos: Float, internal val ssin: Float, internal val tx: Float, internal val ty: Float ) { override fun equals(other: Any?): Boolean { if (other === this) return true if (other !is RSXform) return false if (scos.compareTo(other.scos) != 0) return false if (ssin.compareTo(other.ssin) != 0) return false if (tx.compareTo(other.tx) != 0) return false return ty.compareTo(other.ty) == 0 } override fun hashCode(): Int { val PRIME = 59 var result = 1 result = result * PRIME + scos.toBits() result = result * PRIME + ssin.toBits() result = result * PRIME + tx.toBits() result = result * PRIME + ty.toBits() return result } override fun toString(): String { return "RSXform(_scos=$scos, _ssin=$ssin, _tx=$tx, _ty=$ty)" } companion object { /** * Initialize a new xform based on the scale, rotation (in radians), final tx,ty location * and anchor-point ax,ay within the src quad. * * Note: the anchor point is not normalized (e.g. 0...1) but is in pixels of the src image. */ fun makeFromRadians(scale: Float, radians: Float, tx: Float, ty: Float, ax: Float, ay: Float): RSXform { val s = sin(radians.toDouble()).toFloat() * scale val c = cos(radians.toDouble()).toFloat() * scale return RSXform(c, s, tx + -c * ax + s * ay, ty + -s * ax - c * ay) } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy