一种尝试的方法是使用TexturePaint和g.fillRect()绘制图像.然而,这需要您在每次绘制图像时创建一个新的TexturePaint和Rectangle2D对象,这是不理想的 - 并且无论如何都没有帮助.
当我使用时g.drawImage(BufferedImage,...),旋转的图像看起来模糊/柔和.
我熟悉RenderingHints和双缓冲(我认为这就是我正在做的事情),我发现很难相信你不能轻易有效地在Java中旋转产生尖锐结果的图像.
使用代码TexturePaint看起来像这样.
Grahics2D g2d = (Graphics2D)g;
g2d.setPaint(new TexturePaint(bufferedImage, new Rectangle2D.Float(0,0,50,50)));
g2d.fillRect(0,0,50,50);
Run Code Online (Sandbox Code Playgroud)
我正在用AffineTransform一把牌旋转成一个风扇.什么是快速绘制好看图像的最佳方法?
这是一个截图:
9是清脆的,但其余的卡肯定不那么尖锐.
问题可能出在我创建每张卡片图像并将其存储在数组中时.
这就是我现在正在做的事情:
// i from 0 to 52, card codes.
...
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
BufferedImage img = gc.createCompatibleImage(86, 126, Transparency.TRANSLUCENT);
Graphics2D g = img.createGraphics();
setRenderingHints(g);
g.drawImage(shadow, 0, 0, 86, 126, null);
g.drawImage(white, 3, 3, 80, 120, null);
g.drawImage(suit, 3, 3, 80, …Run Code Online (Sandbox Code Playgroud) 要在两个变量之间进行线性插值a并b给出一个分数f,我目前正在使用此代码:
float lerp(float a, float b, float f)
{
return (a * (1.0 - f)) + (b * f);
}
Run Code Online (Sandbox Code Playgroud)
我认为这可能是一种更有效的方法.我正在使用没有FPU的微控制器,因此浮点运算是在软件中完成的.它们相当快,但它仍然可以添加或增加100个周期.
有什么建议?
为了清楚起见,在上面的代码中,我们可以省略指定1.0为显式浮点文字.
在我需要使用Objective C类来扩展Swift类的情况下.我做了如下的事情:
在"SomeClass.swift"中:
class SomeClass: NSObject {
}
Run Code Online (Sandbox Code Playgroud)
在"SomeClass + Extension.h"中:
#import "Project-Swift.h"
@interface SomeClass (Extension)
-(void)someMethod();
@end
Run Code Online (Sandbox Code Playgroud)
这运作良好.如果我尝试在Objective C代码中使用SomeClass扩展,那很好.
问题是,如果我想someMethod()在另一个Swift类中使用,我需要将SomeClass+Extension.h文件放入我的ObjC-BridgingHeader.h文件中.
但这样做会导致循环依赖,因为SomeClass+Extension.h也是进口Project-Swift.h.
有没有人有一个很好的方法来解决这个问题?
请注意,简单地向前声明类别标题中的类将不起作用,因为类别不能使用前向声明为它自己的实现,因为:
@class SomeClass没有导入Project-Swift.h会给出编译错误.
我有一组定义3D轮廓的3D点.我想要做的是获得与此轮廓相对应的最小曲面表示(请参阅维基百科中的最小曲面).基本上这需要求解非线性偏微分方程.
在Matlab中,使用该pdenonlin函数几乎是直截了当的(参见Matlab的文档).可以在此处找到用于解决最小表面问题的示例:单位磁盘上的最小表面问题.
我需要在Python中实现这样的实现,但我知道我还没有找到任何关于如何实现这一目标的Web资源.
任何人都可以指出这种实施的任何资源/例子吗?
谢谢,米格尔.
UPDATE
我想要找到的3D表面(理想情况下是三角形网格表示)受这组3D点的限制(如图所示,这些点位于最佳拟合平面中):

好吧,做一些研究我发现这个最小的表面问题与双调和方程的解决方案有关,我还发现薄板样条是这个方程的基本解.
所以我认为这种方法是尝试使用薄板样条来拟合表面的稀疏表示(由点的3D轮廓给出).我在scipy.interpolate中找到了这个例子,其中使用薄板样条插值散射数据(x,y,z格式)以获得均匀网格(XI,YI)上的ZI坐标.
出现两个问题:(1)薄板样条插值是否是从三维轮廓点集计算表面问题的正确方法?(2)如果是这样,如何使用NON-UNIFORM网格在scipy上执行薄板插值?
再次感谢!米格尔
更新:MATLAB中的实现(但它不适用于SCIPY PYTHON)
我使用Matlab的函数跟踪了这个例子,tpaps并在均匀网格上获得了适合我轮廓的最小曲面.这是Matlab的结果(看起来很棒!):

但是我需要在Python中实现它,所以我使用包scipy.interpolate.Rbf和thin-plate函数.这是python中的代码(XYZ包含轮廓中每个点的3D坐标):
GRID_POINTS = 25
x_min = XYZ[:,0].min()
x_max = XYZ[:,0].max()
y_min = XYZ[:,1].min()
y_max = XYZ[:,1].max()
xi = np.linspace(x_min, x_max, GRID_POINTS)
yi = np.linspace(y_min, y_max, GRID_POINTS)
XI, YI = np.meshgrid(xi, yi)
from scipy.interpolate import Rbf
rbf = Rbf(XYZ[:,0],XYZ[:,1],XYZ[:,2],function='thin-plate',smooth=0.0)
ZI = rbf(XI,YI)
Run Code Online (Sandbox Code Playgroud)
然而,这是结果(与Matlab中获得的结果完全不同):

很明显,scipy的结果与最小的表面不对应. …
我一直在努力为我的2D矩阵中的"空"像素提供数据.基本上,我理解(但不是很深)插值技术,如反距离加权,克里金,双立方等.我不完全知道起点(在问题陈述或Python案例中).
问题定义: 我有MxN矩阵(规则网格),其中每个像素代表一定的测量值(下图和此图中使用的数据在 这里).我想使用我作为蓝色像素的现有数据插入"问号空间"(白色空间,也包括相同大小但空白的像素)区域的数据.

我的问题:
1)如何插入此数据.任何人都可以给我一个简单的例子(例如3x3矩阵)来清楚地理解这一点吗?
2)有人可以指导我如何在Python环境中执行解决方案的步骤吗?
3)如何使用Python比较精度意义上的插值技术?
4)您是否认为根据数据密度使用不同的插值是个好主意?
我将非常感谢您的回答和建议.
所以,我有三个numpy数组,它们在网格上存储纬度,经度和一些属性值 - 也就是说,我有LAT(y,x),LON(y,x),并说温度T(y,x) ),对于x和y的某些限制.网格不一定是规则的 - 事实上,它是三极的.
然后我想将这些属性(温度)值插值到一堆不同的纬度/经度点(存储为lat1(t),lon1(t),大约10,000吨......),这些点不落在实际网格点上.我已经尝试了matplotlib.mlab.griddata,但这需要太长时间(毕竟它并不是为我正在做的事情设计的).我也试过scipy.interpolate.interp2d,但是我得到了一个MemoryError(我的网格大约是400x400).
有没有任何光滑的,最好快速的方式这样做?我不禁想到答案显而易见......谢谢!!
#!/bin/bash
COUNTER=$#
until [ $COUNTER -eq 0 ]; do
args[$COUNTER]=\$$COUNTER
let COUNTER-=1
done
echo ${args[@]}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到以下结果
user@host:~/sandbox# ./script.sh first second third
$1 $2 $3
Run Code Online (Sandbox Code Playgroud)
而且我期待它回应出1美元,2美元和3美元不是"1美元"的文本值
我正在尝试用bash编写一个脚本,它将创建一个数组,该数组的大小与我给它的参数数量相同.
我期待着
user@host:~/sandbox# ./script.sh alpha bravo charlie
alpha bravo charlie
Run Code Online (Sandbox Code Playgroud)
要么
user@host:~/sandbox# ./script.sh 23425 jasson orange green verb noun coffee
23425 jasson orange green verb noun coffee
Run Code Online (Sandbox Code Playgroud)
所以,目标是制作
args[0]=$1
args[1]=$2
args[2]=$3
args[3]=$4
Run Code Online (Sandbox Code Playgroud)
我拥有它的方式,$1,$2,$3不是插值,而是只是作为文本字符串读取.
我有几个值在同一个不规则网格上定义(x, y, z),我想插入到新网格上(x1, y1, z1).即,我有f(x, y, z), g(x, y, z), h(x, y, z),我想计算f(x1, y1, z1), g(x1, y1, z1), h(x1, y1, z1).
目前我正在使用这个scipy.interpolate.griddata并且效果很好.但是,因为我必须单独执行每个插值并且有很多点,所以它很慢,在计算中有很多重复(即找到哪些点最接近,设置网格等等).
有没有办法加快计算速度并减少重复计算?即沿着定义两个网格的线条,然后更改插值的值?
由Emgu(OpenCV的.net包装器)提供的图像大小调整功能可以使用以下四种插值方法中的任何一种:
我粗略地理解线性插值,但只能猜测立方或区域的作用.我怀疑NN代表最近的邻居,但我可能是错的.
我正在调整图像大小的原因是减少像素数量(它们将在某个时刻迭代)同时保持它们的代表性.我之所以提到这一点,是因为在我看来插值是这个目的的核心 - 因此获得正确的类型应该非常重要.
那么我的问题是,每种插值方法的优缺点是什么?它们如何不同,我应该使用哪一个?