tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
36
Task/Quaternion-type/Scala/quaternion-type-1.scala
Normal file
36
Task/Quaternion-type/Scala/quaternion-type-1.scala
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
case class Quaternion(re:Double =0.0, i:Double =0.0, j:Double =0.0, k:Double =0.0) {
|
||||
lazy val im=(i, j, k)
|
||||
private lazy val norm2=re*re + i*i + j*j + k*k
|
||||
lazy val norm=math.sqrt(norm2)
|
||||
|
||||
def negative=new Quaternion(-re, -i, -j, -k)
|
||||
def conjugate=new Quaternion(re, -i, -j, -k)
|
||||
def reciprocal=new Quaternion(re/norm2, -i/norm2, -j/norm2, -k/norm2)
|
||||
|
||||
def +(q:Quaternion)=new Quaternion(re+q.re, i+q.i, j+q.j, k+q.k)
|
||||
def -(q:Quaternion)=new Quaternion(re-q.re, i-q.i, j-q.j, k-q.k)
|
||||
def *(q:Quaternion)=new Quaternion(
|
||||
re*q.re - i*q.i - j*q.j - k*q.k,
|
||||
re*q.i + i*q.re + j*q.k - k*q.j,
|
||||
re*q.j - i*q.k + j*q.re + k*q.i,
|
||||
re*q.k + i*q.j - j*q.i + k*q.re
|
||||
)
|
||||
def /(q:Quaternion)=this*q.reciprocal
|
||||
|
||||
def unary_- = negative
|
||||
def unary_~ = conjugate
|
||||
|
||||
override def equals(x:Any):Boolean=x match {
|
||||
case Quaternion(re, i, j, k) => (Double.doubleToLongBits(this.re)==Double.doubleToLongBits(re)) &&
|
||||
Double.doubleToLongBits(this.i)==Double.doubleToLongBits(i) &&
|
||||
Double.doubleToLongBits(this.j)==Double.doubleToLongBits(j) &&
|
||||
Double.doubleToLongBits(this.k)==Double.doubleToLongBits(k)
|
||||
case _ => false
|
||||
}
|
||||
|
||||
override def toString()="Q(%.2f, %.2fi, %.2fj, %.2fk)".formatLocal(Locale.ENGLISH, re,i,j,k)
|
||||
}
|
||||
|
||||
object Quaternion {
|
||||
implicit def number2Quaternion[T <% Number](n:T):Quaternion = apply(n.doubleValue)
|
||||
}
|
||||
35
Task/Quaternion-type/Scala/quaternion-type-2.scala
Normal file
35
Task/Quaternion-type/Scala/quaternion-type-2.scala
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
val q0=Quaternion(1.0, 2.0, 3.0, 4.0);
|
||||
val q1=Quaternion(2.0, 3.0, 4.0, 5.0);
|
||||
val q2=Quaternion(3.0, 4.0, 5.0, 6.0);
|
||||
val r=7;
|
||||
|
||||
println("q0 = "+ q0)
|
||||
println("q1 = "+ q1)
|
||||
println("q2 = "+ q2)
|
||||
println("r = "+ r)
|
||||
println()
|
||||
|
||||
println("q0.re = "+ q0.re)
|
||||
println("q0.im = "+ q0.im)
|
||||
println("q0.norm = "+ q0.norm)
|
||||
println("q0.negative = "+ q0.negative)
|
||||
println("-q0 = "+ -q0)
|
||||
println("q0.conjugate = "+ q0.conjugate)
|
||||
println("~q0 = "+ ~q0)
|
||||
println("q1+q2 = "+ (q1+q2))
|
||||
println("q2+q1 = "+ (q2+q1))
|
||||
println("q1+r = "+ (q1+r))
|
||||
println("r+q1 = "+ (r+q1))
|
||||
println("q1-q2 = "+ (q1-q2))
|
||||
println("q2-q1 = "+ (q2-q1))
|
||||
println("q1-r = "+ (q1-r))
|
||||
println("r-q1 = "+ (r-q1))
|
||||
println("q1*q2 = "+ q1*q2)
|
||||
println("q2*q1 = "+ q2*q1)
|
||||
println("q1*r = "+ q1*r)
|
||||
println("r*q1 = "+ r*q1)
|
||||
println("(q1*q2)!=(q2*q1) = "+ ((q1*q2)!=(q2*q1)))
|
||||
println("q1/q2 = "+ q1/q2)
|
||||
println("q2/q1 = "+ q2/q1)
|
||||
println("q1/r = "+ q1/r)
|
||||
println("r/q1 = "+ r/q1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue