gpt4 book ai didi

Scala:仿射变换

转载 作者:行者123 更新时间:2023-12-02 17:45:47 24 4
gpt4 key购买 nike

在 Scala 中实现仿射变换的最佳方法是什么?标准库或 Spire 中似乎没有任何内容。 AWT AffineTransformation 类的可变性非常大,我绝对不想改变 Graphics2D 类。自己编写或将 Java 类包装在值返回函数中是否更有效,或者是否已经有合适的 Scala 库?

编辑:我认为基本方程对于编码来说并不太具有挑战性。复杂之处似乎是添加 90/180/270 旋转的特殊情况并处理 int/double/float 转换以获得全面的解决方案。

最佳答案

我同意这个评论,不要花精力自己实现这些公式。

import java.awt.geom.{AffineTransform => JTransform}

object AffineTransform {
implicit def toJava(at: AffineTransform): JTransform = at.toJava
implicit def fromJava(j: JTransform): AffineTransform = {
import j._
AffineTransform(getScaleX, getShearY,
getShearX, getScaleY,
getTranslateX, getTranslateY)
}
val identity: AffineTransform = new JTransform()
}
final case class AffineTransform(scaleX: Double, shearY: Double,
shearX: Double, scaleY: Double,
translateX: Double, translateY: Double) {

def toJava: JTransform = new JTransform(scaleX, shearY,
shearX, scaleY,
translateX, translateY)

override def toString = "AffineTransform[[" +
scaleX + ", " + shearX + ", " + translateX + "], [" +
shearY + ", " + scaleY + ", " + translateY + "]]"

def scale(sx: Double, sy: Double): AffineTransform = {
val j = toJava; j.scale(sx, sy); j
}
// ... etc
}

测试:

AffineTransform.identity.scale(0.5, 1.0)

关于Scala:仿射变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com