通过Jython设置对角镜像(用户设置点)

时间:2016-10-16 10:18:28

标签: python jython jes

试图了解我们需要创建的这个程序 需要的是根据说明: 创建一个名为的函数 arbitraryMirror()允许用户以任意角度放置镜像,从而导致交叉,从而镜像图像。

这需要在正方形或矩形图片上完成。

根据下面的图片,这是所需内容的输出。

Output

我知道如何用正方形图像镜像图片(如下图所示),但是如果这也可以用矩形图像完成,我就无法理解了吗?

Cross

我看了一下使用y = mx + b的方法,但它似乎过于复杂? 也许我需要一些坐标几何?还是代数? 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

关键公式是(python):

# (x0, y0) and (x1, y1) are two points on the mirroring line
# dx, dy, L is the vector and lenght
dx, dy = x1 - x0, y1 - y0
L = (dx**2 + dy**2) ** 0.5

# Tangent (tx, ty) and normal (nx, ny) basis unit vectors
tx, ty = dx / L, dy / L
nx, ny = -dy / L, dx / L

# For each pixel
for y in range(h):
    for x in range(w):
        # Map to tangent/normal space
        n = (x+0.5 - x0)*nx + (y+0.5 - y0)*ny
        t = (x+0.5 - x0)*tx + (y+0.5 - y0)*ty

        # If we're in the positive half-space
        if n >= 0:
            # Compute mirrored point in XY space
            # (negate the normal component)
            xx = int(x0 + t*tx - n*nx + 0.5)
            yy = int(y0 + t*ty - n*ny + 0.5)

            # If valid copy to destination
            if 0 <= xx < w and 0 <= yy < h:
                img[y][x] = img[yy][xx]

您可以在此处查看结果示例 example of mirroring

左上角的红色边角是在原始图像之外镜像像素的像素,它们不受上述代码的影响。