Java 将矩形图像变形为不规则形状

Java 将矩形图像变形为不规则形状,java,image,image-processing,Java,Image,Image Processing,我一直在网上搜索如何将规则形状变形为不规则形状。到目前为止,我只找到了关于使事物沿着曲线或相似的路径运行的资源 我期待做一个完整的形状转换。高效地将规则矩形转化为不规则形状。我的理想目标是将其用于简单的2D布料模拟动画。 网络上是否有我无法找到的现有资源?或者你们知道我将如何创建一个算法来处理这种类型的变形吗 我最初的猜测是一个轴一个轴地顺序变形我的形状,但我担心这可能会导致很多变形。有什么想法吗?是的,你可以通过将图像分成矩形(然后每个矩形分成两个三角形),然后使用graphics.draw

我一直在网上搜索如何将规则形状变形为不规则形状。到目前为止,我只找到了关于使事物沿着曲线或相似的路径运行的资源

我期待做一个完整的形状转换。高效地将规则矩形转化为不规则形状。我的理想目标是将其用于简单的2D布料模拟动画。

网络上是否有我无法找到的现有资源?或者你们知道我将如何创建一个算法来处理这种类型的变形吗


我最初的猜测是一个轴一个轴地顺序变形我的形状,但我担心这可能会导致很多变形。有什么想法吗?

是的,你可以通过将图像分成矩形(然后每个矩形分成两个三角形),然后使用
graphics.drawImage(…)
仿射变换设置为图形(每个三角形的变换不同)后,再使用
graphics.drawImage(…)

我已经在这个小程序中完成了:

(如果您点击当前出现的关于Java小程序的各种警告),那么当您点击小程序中的页面或书签时,您将看到一种“翻页”效果,如上所述。(这是一个小程序,应该看起来像一本书。)

任何局部仿射的映射都可以通过这种方式实现。(这是你最关心的问题。)


要找到为每个三角形定义仿射变换的六个参数,必须对每个三角形的三个角进行光线跟踪。(如果您不熟悉“光线跟踪”,它比听起来容易得多。您只需指定点从何处映射以及映射到何处。)然后使用一些基本数学来求解仿射变换参数。

我想我可能已经找到了如何使用AfflineTransform和shear()实现类似的操作。然而,它仍然不会完全达到效果。您可能应该指出您是否真的想将此应用于图像-特别是,您是否在谈论
缓冲区图像
?这与布料模拟有多大关系?对于这样的模拟,通常需要3D坐标,否则距离(边长度)几乎没有意义(在2D中,只能合理地模拟绳索-即1D对象)。不管怎样:仿射变换(即使在3D中)的问题是它们是。。。嗯,仿射。它们不提供任意的转换。关于背景和意图的更多信息可能会有所帮助,基本上,这是肯定的。除了所有的直线,而不是小曲线。这将用于我的游戏角色的布衣。是的,这将是一系列缓冲区映像。编辑:理论上,仿射变换在这个应用中是最现实的,因为材料不会被拉伸。实际上,你展示的不是仿射变换,而是透视变换。仿射变换使平行线保持平行。如果有帮助的话,OpenCV有一些内置的功能来执行透视扭曲。@LexWebb关于链接图像:当布料在两个角上附着时,边可能根本不会拉伸,那么。。。它将保持完美的矩形,如左图所示!除此之外,此类模拟通常不适用于四边形的变形。通常,它们作用于边缘,边缘(在最简单的情况下)被建模为质量弹簧模型()的力。对于各向异性拉伸行为,这些方法很少对三角形进行操作。在任何情况下,模拟都与图像无关