gpt4 book ai didi

java - 如何在 Java 中的 "similar"3D vector 类之间进行转换?

转载 作者:行者123 更新时间:2023-11-29 06:09:52 24 4
gpt4 key购买 nike

我正在编写一个 geom 包作为 Java 库的一部分,它有自己的 vector 类:

package mypackage.geom;

public class Vector3D {
public float x;
public float y;
public float z;

public Vector3D(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
}
...
}

我的库有望补充第三方库的功能,第三方库也实现了 vector 类,比如 Vec3DVec3D 类具有与我相同的字段(float xfloat yfloat z)和构造函数签名Vector3D 类。我只想在我的库中需要 Vector3D 参数的任何地方使用第三方 vector 类(例如,假设我有一个 Camera 类,它有一个 setPosition( Vector3D vector3D) 方法,我希望能够将 Vec3D 实例传递给它)。

这在 C++ 中是可能的。例如,可以通过以下方式声明从任何类到 Vector3D 的通用显式转换器构造函数:

template <class C>
explicit Vector3D(const C& c) : x(c[0]), y(c[1]), z(c[2]) {}

它所需要的只是外国人类实现operator[]。我想知道如何在 Java 中实现类似的东西,如果可能的话。

最佳答案

有几个选项,没有一个像您显示的那样好。首先,当然可以写一个显式的构造器:

Vector3d(Vec3d v) {this.x = v.x; this.y = v.y; this.z = v.z; }

其次,您可以提供一个适用于实现您定义的接口(interface)(称之为“V”:)的任何 vector 类型的构造函数

Vector3d(V v) {this.x = v.getX(); this.y = v.getY(); this.z = v.getZ(); }

当然,任何类似 vector 的随机事物实现 V 的可能性几乎为 0,除非您是某种标准机构。

您还可以提供一个采用double[] 的构造函数,假设大多数此类类型将提供toArray() 类方法:

Vector3d(double[] v) {this.x = v[0]; this.y = v[1]; this.z = v[2]; }

这将使将大多数其他 vector 类转换为您的 vector 类变得相对容易,而无需添加自定义构造函数。

关于java - 如何在 Java 中的 "similar"3D vector 类之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302814/

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