创建一个益智游戏,我希望形状变形的基础上,用户输入。用户单击顶点并拖动该点以更改形状例如,如果用户单击a并向下拖动(缩短段ag),则点b将向下移动等量(缩短bc),点f将向左移动以缩短af和fg,最后点e也将向左移动以与点f保持一致。
有一个线段数组,每个线段本身就是一个包含两个端点的数组。在移位时,我循环搜索所有相等的点。所有这些都不是一成不变的,他们都不愿意做出任何必要的改变,以使这项工作发挥作用。
我已经做了两天了,完全被难住了。
A
B-------------\
| | \
| | \
| | \
| | \
C------------------\F
| G |
| |
| |
D-------------------E
最佳答案
联立方程组,不是吗?
我假设每条线都应该保持它的斜率那么你的图形满足这些方程(或者几乎满足这些方程,我不能百分之百确定af线的斜率):
B.X=C.X=D.X
B.y=年
C.y=G.y=F.y
d.y=e.y
A.x=G.x
F.x=E.x
(A.y-F.y)=2(F.x-A.x)
当玩家拖动a时,a.y和a.x实际上是常数,所以你有十一个方程和十二个未知数。(正如beta指出的,有一些是受约束的,因为三个方程b.x=c.x=d.x与其他任何方程都不相关,d.y=e.y也不相关。)
你可能想要的是改变变量最少的解决方案。我不知道怎么做。但由于这是一个游戏,如果你偶尔不能得到最小的变化,这可能并不重要。所以也许贪婪的算法会起作用,比如:
让我们作为一组变量,保持不变初始化为空集合。
对于每个变量v,如果方程组可以通过保持变量s{v}连续来求解,则将v添加到s。
你找到的最后一个解决方案是你使用的那个。
关于iphone - 二维线段变形算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4298187/