我如何将此 c# 代码翻译成 java
How do i translate this c# code into java
我正在尝试测试 De-Casteljau 细分代码。但是我的示例是在 c# 中,我想在 java 中测试它,因为我不知道 c#。
尤其是最后一个 return 给了我问题,因为我无法正确处理。
我使用 Vec2D 而不是代表基本二维向量的点。在这种情况下,我用 Vec2D 数组表示点。我有像 "getX" 这样的方法来获取 x 部分,但如果我只是在最后一行更改它,它就会失败。
总结一下,我用 Vec2D[] 交换了 "Point",用 p1.getX 交换了 p1.X。
private void drawCasteljau(List<point> list)
{
Point tmp;
for (double t = 0; t & lt;= 1; t += 0.001) {
tmp = getCasteljauPoint(points.Count - 1, 0, t);
image.SetPixel(tmp.X, tmp.Y, color);
}
}
private Point getCasteljauPoint(int r, int i, double t)
{
if (r == 0) return points[i];
Point p1 = getCasteljauPoint(r - 1, i, t);
Point p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Point((int)((1 - t) * p1.X + t * p2.X), (int)((1
- t) * p1.Y + t * p2.Y));
}
我的尝试:
public Vec2D[] getCasteljauPoint(int r, int i, double t) {
if(r == 0) return new Vec2D[i];
Vec2D[] p1 = getCasteljauPoint(r - 1, i, t);
Vec2D[] p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Vec2D(((1/2) * p1.getX + (1/2) * p2.getX), ((1/2)
* p1.getY + (1/2) * p2.getY));
}
我觉得应该只做一些小的改变才能让它继续下去,但我卡住了。最后一行的错误消息说
- getX 无法解析或不是字段
- 类型不匹配:无法从 Vec2D 转换为 Vec2D[]
您将 p1
和 p2
声明为 Vec2D
数组,并且您的方法定义指定了 Vec2D
数组 return 类型。但是,在您的方法中,您 return 一个单独的 Vec2D
对象。
可能的解决方案:
public class SomeJavaClassName
{
ArrayList<Vec2D> points = new ArrayList<String>();
// Other methods, properties, variables, etc.,
// some of which would populate points
public Vec2D getCasteljauPoint(int r, int i, double t) {
// points[] is declared outside just like in the C# code
if(r == 0) return points.get(i);
Vec2D p1 = getCasteljauPoint(r - 1, i, t);
Vec2D p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Vec2D(((1/2) * p1.getX + (1/2) * p2.getX), ((1/2)
* p1.getY + (1/2) * p2.getY));
}
}
我正在尝试测试 De-Casteljau 细分代码。但是我的示例是在 c# 中,我想在 java 中测试它,因为我不知道 c#。
尤其是最后一个 return 给了我问题,因为我无法正确处理。 我使用 Vec2D 而不是代表基本二维向量的点。在这种情况下,我用 Vec2D 数组表示点。我有像 "getX" 这样的方法来获取 x 部分,但如果我只是在最后一行更改它,它就会失败。 总结一下,我用 Vec2D[] 交换了 "Point",用 p1.getX 交换了 p1.X。
private void drawCasteljau(List<point> list)
{
Point tmp;
for (double t = 0; t & lt;= 1; t += 0.001) {
tmp = getCasteljauPoint(points.Count - 1, 0, t);
image.SetPixel(tmp.X, tmp.Y, color);
}
}
private Point getCasteljauPoint(int r, int i, double t)
{
if (r == 0) return points[i];
Point p1 = getCasteljauPoint(r - 1, i, t);
Point p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Point((int)((1 - t) * p1.X + t * p2.X), (int)((1
- t) * p1.Y + t * p2.Y));
}
我的尝试:
public Vec2D[] getCasteljauPoint(int r, int i, double t) {
if(r == 0) return new Vec2D[i];
Vec2D[] p1 = getCasteljauPoint(r - 1, i, t);
Vec2D[] p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Vec2D(((1/2) * p1.getX + (1/2) * p2.getX), ((1/2)
* p1.getY + (1/2) * p2.getY));
}
我觉得应该只做一些小的改变才能让它继续下去,但我卡住了。最后一行的错误消息说 - getX 无法解析或不是字段 - 类型不匹配:无法从 Vec2D 转换为 Vec2D[]
您将 p1
和 p2
声明为 Vec2D
数组,并且您的方法定义指定了 Vec2D
数组 return 类型。但是,在您的方法中,您 return 一个单独的 Vec2D
对象。
可能的解决方案:
public class SomeJavaClassName
{
ArrayList<Vec2D> points = new ArrayList<String>();
// Other methods, properties, variables, etc.,
// some of which would populate points
public Vec2D getCasteljauPoint(int r, int i, double t) {
// points[] is declared outside just like in the C# code
if(r == 0) return points.get(i);
Vec2D p1 = getCasteljauPoint(r - 1, i, t);
Vec2D p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Vec2D(((1/2) * p1.getX + (1/2) * p2.getX), ((1/2)
* p1.getY + (1/2) * p2.getY));
}
}