gpt4 book ai didi

Java,如何创建一个类似Math的类

转载 作者:行者123 更新时间:2023-12-01 17:22:31 26 4
gpt4 key购买 nike

我正在尝试用java编写glm的移植。

目前我创建了一个包 jglm,在这个包内有所有不同的类 Mat4、Vec4、Vec3 等。

如:

public class Mat {

protected float[] matrix;
protected int order;
}

我可以通过输入来调用他们

jgml.Mat4 modelviewMatrix = new Jgml.Mat4(1.0f);

这很好..

现在我也在写一些方法,比如

mix(x, y, lerp)

我也想使用它,如上所述,即

float value = jglm.mix(x, y, lerp)

但是当然在这种情况下 Jglm 必须是一个类...

有没有办法将这两件事结合在一起?

编辑:如果我创建一个类 jglm.Jglm

package jglm;

/**
*
* @author gbarbieri
*/
public class Jglm {

public class Mat {

protected float[] matrix;
protected int order;
}

public class Mat4 extends Mat {

public Vec4 c0;
public Vec4 c1;
public Vec4 c2;
public Vec4 c3;

public Mat4(float value) {

order = 4;

matrix = new float[16];

for (int i = 0; i < 4; i++) {
matrix[i * 5] = value;
}
c0 = new Vec4(matrix, 0);
c1 = new Vec4(matrix, 4);
c2 = new Vec4(matrix, 8);
c3 = new Vec4(matrix, 12);
}

public float[] toFloatArray() {
return new float[]{
c0.x, c0.y, c0.z, c0.w,
c1.x, c1.y, c1.z, c1.w,
c2.x, c2.y, c2.z, c2.w,
c3.x, c3.y, c3.z, c3.w,};
}
}

public static float mix(float start, float end, float lerp) {
return (start + lerp * (end - start));
}
}

当我尝试实例化

cameraToClipMatrix_mat4 = new Jglm.Mat4(1.0f);

我得到“需要包含 Jglm.Mat4 的封闭实例

最佳答案

At the moment I created a package Jglm and inside this package there are all the different classes Mat4, Vec4, Vec3, etc..

在Java中,包的命名必须全部小写。按照您的方式命名会让任何查看您的代码的人感到惊讶,并且还可能导致编译器出现严重的名称解析问题。

习惯上导入我们正在使用的所有类,因此我们在代码中仅通过它们的简单名称来引用它们。也许你可以考虑声明

package org.example.jglm;

public class Jglm {
public static void mix(double x, double y, Lerp lerp) {
...
}
}

在客户端,你可以这样写

import org.example.Jglm;

void someMethod() {
Jglm.mix(x,y,lerp);
}

一般来说,当您的代码中需要一些纯函数时,请将它们声明为静态方法。看java.lang.Math源代码作为指导。

关于Java,如何创建一个类似Math的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522363/

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