我有2个int数组用于创建一个多边形(看起来像一条鱼)。我需要对阵列水平翻转多边形做什么?
x = new int[]
{ 0, 18, 24, 30, 48, 60, 60, 54, 60, 48, 30, 24, 0 };
y = new int[]
{ 0, 18, 6, 0, 0, 12, 18, 24, 24, 36, 36, 30, 36 };
答案 0 :(得分:10)
您需要找到x
数组的最大值。在这种情况下,它是60
。然后使用循环将每个x坐标设置为60 - x
,如下所示:
for (i = 0; i < NUMBER_OF_POINTS; i++) {
x[i] = MAX_X - x[i];
}
答案 1 :(得分:4)
使用此公式修改x坐标x = 60 - x
答案 2 :(得分:1)
答案 3 :(得分:0)
我认为'翻转'的意思是让一条从左到右的鱼变成一条从右到左的鱼。这意味着您有效地反映了x = a线周围的鱼,其中a是鱼的中点的水平坐标。在这种情况下,a =(max(x []) - min(x []))/ 2。
对于每个点,我们检查它是否在x = a的左侧或右侧。如果它在左边,我们简单地改变它,使它现在与右边的距离相同,否则我们改变它,使它与左边的距离相同。
我认为以下(未经测试的)代码可行。我将所有值保持为整数,因此可能会出现轻微的失真。但是,在失真消失之前,应该很容易调整代码。
int max_x=-1;
int min_x=Integer.MAX_VALUE;
for (int v:x){
max_x=Math.max(max_x,v);
min_x=Math.miN(min_x,v);
}
int mid=(max_x-min_x)/2;
int[] reflected_x=new int[x.length];
for(int i=0;i<x.length;i++){
int diff=Math.abs(x[i]-mid);
if (x[i]<mid) reflected_x[i]=mid+diff;
else reflected_x[i]=mid-diff;
}
答案 4 :(得分:0)
您可能会发现使用图形类'平移和缩放方法而不是操纵数组内容更容易。
答案 5 :(得分:0)
如果使用Point2D抽象而不是两个int数组,您可能会发现这更容易。这些不是单独的实体,它们是相关的。那你为什么要编写代码就好像根本没有任何关系呢?你的Point和Polygon课程在哪里?抽象在哪里?
如果我通过水平“翻转”了解你的意思,我想你想要反思y轴。如果这是真的,你所要做的就是改变所有x坐标的符号,你就完成了。
因此,端点为A(xa,ya)和B(xb,yb)的向量变为(-xa,ya)和(-xb,yb)。