一种尝试的方法是使用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) 假设您有一个2D numpy数组,其中包含一些随机值和周围的零.
示例"倾斜矩形":
import numpy as np
from skimage import transform
img1 = np.zeros((100,100))
img1[25:75,25:75] = 1.
img2 = transform.rotate(img1, 45)
Run Code Online (Sandbox Code Playgroud)
现在我想找到所有非零数据的最小边界矩形.例如:
a = np.where(img2 != 0)
bbox = img2[np.min(a[0]):np.max(a[0])+1, np.min(a[1]):np.max(a[1])+1]
Run Code Online (Sandbox Code Playgroud)
实现这一结果的最快方法是什么?我确信有更好的方法,因为如果我使用1000x1000数据集,np.where函数需要相当长的时间.
编辑:还应该在3D中工作......
我需要将一些数据转换为"正常形状",并且我读到Box-Cox可以识别用于转换数据的指数.
对于我的理解
car::boxCoxVariable(y)
Run Code Online (Sandbox Code Playgroud)
用于线性模型中的响应变量,和
MASS::boxcox(object)
Run Code Online (Sandbox Code Playgroud)
对于公式或拟合的模型对象.因此,因为我的数据是数据帧的变量,所以我发现我可以使用的唯一函数是:
car::powerTransform(dataframe$variable, family="bcPower")
Run Code Online (Sandbox Code Playgroud)
那是对的吗?或者我错过了什么?
第二个问题是关于我获得之后要做什么
Estimated transformation parameters
dataframe$variable
0.6394806
Run Code Online (Sandbox Code Playgroud)
我应该简单地将变量乘以这个值吗?我这样做了:
aaa = 0.6394806
dataframe$variable2 = (dataframe$variable)*aaa
Run Code Online (Sandbox Code Playgroud)
然后我运行shapiro-wilks测试的正常性,但我的数据似乎不遵循正态分布:
shapiro.test(dataframe$variable2)
data: dataframe$variable2
W = 0.97508, p-value < 2.2e-16
Run Code Online (Sandbox Code Playgroud) 我正在努力解决有关CGAffineTransform缩放和平移的问题,当我在已经有变换的视图上的动画块中设置变换时,视图会在动画之前跳过一点.
例:
// somewhere in view did load or during initialization
var view = UIView()
view.frame = CGRectMake(0,0,100,100)
var scale = CGAffineTransformMakeScale(0.8,0.8)
var translation = CGAffineTransformMakeTranslation(100,100)
var concat = CGAffineTransformConcat(translation, scale)
view.transform = transform
// called sometime later
func buttonPressed() {
var secondScale = CGAffineTransformMakeScale(0.6,0.6)
var secondTranslation = CGAffineTransformMakeTranslation(150,300)
var secondConcat = CGAffineTransformConcat(secondTranslation, secondScale)
UIView.animateWithDuration(0.5, animations: { () -> Void in
view.transform = secondConcat
})
}
Run Code Online (Sandbox Code Playgroud)
现在,当调用buttonPressed()时,视图会在开始设置动画之前跳转到左上角大约10个像素.我只用一个concat变换来见证这个问题,只使用一个转换变换就可以了.
编辑:由于我已就此事做了大量研究,我想我应该提一下,无论是否打开了自动布局,都会出现此问题
我目前正致力于将OpenGL驱动的渲染器实现到2D游戏引擎中.
因为OpenGL屏幕坐标空间是[-1,1],所以我对如何与通用的笛卡尔2D世界坐标系接口感到困惑.
让我们说世界上的视口是[-500,-500]到[1200,1200],其中[0,0]是世界的起源.我只需要翻译并缩小到-1和1之间的坐标吗?或者是否需要执行其他形式的转换?
如何计算在屏幕上绘制已在您自己的坐标系中定义位置的对象的位置?
我很感激有和没有glOrtho的解释(因此我们也可以使用Z轴进行透视效果).
我正在处理的项目涉及从配置文件中读取许多服务端点(url).由于列表非常大,我决定将它们保存在自定义配置文件中,以保持web.config干净小巧.我将自定义部分包含在我的网站中,如下所示:
<mySection configSource="myConfig.config" />
Run Code Online (Sandbox Code Playgroud)
我工作得很好.
但是在将项目部署到不同环境期间出现了转换问题.我有三个web.config文件:
Web.config文件
Web.Uat.config
Web.Release.config
转换web.config工作时,自定义配置文件的转换在部署时失败.
有没有办法在部署期间转换自定义配置文件?
我开发了一个简单的3D引擎(没有使用API),成功地将我的场景转换为世界和视图空间,但是使用透视投影矩阵(OpenGL样式)无法投影我的场景(从视图空间).我不确定fov,近和远的值,我得到的场景是扭曲的.我希望有人能指导我如何使用示例代码正确构建和使用透视投影矩阵.在此先感谢您的帮助.
矩阵构建:
double f = 1 / Math.Tan(fovy / 2);
return new double[,] {
{ f / Aspect, 0, 0, 0 },
{ 0, f, 0, 0 },
{ 0, 0, (Far + Near) / (Near - Far), (2 * Far * Near) / (Near - Far) },
{ 0, 0, -1, 0 }
};
Run Code Online (Sandbox Code Playgroud)
矩阵使用:
foreach (Point P in T.Points)
{
.
. // Transforming the point to homogen point matrix, to world space, and to view space (works …Run Code Online (Sandbox Code Playgroud) 我目前正在处理分层场景图中的节点,并且我难以相对于特定的转换空间(例如父节点)正确地转换/旋转节点.
如何在场景图中相对于其父节点正确平移/旋转节点?
考虑以下水分子图(没有连接线)用于场景节点的父/子结构,其中O xygen原子是父节点,2 H ydrogen原子是子节点.
如果您抓住父O xygen原子并翻译结构,您希望H ydrogen儿童跟随并保持与父母相同的相对位置.如果你抓住一个孩子H原子并翻译它,那么只有孩子会受到影响.这通常是它目前的工作方式.当O原子被翻译时,H原子会随着它自动移动,正如层次图所预期的那样.
然而,当翻译父母时,孩子们最终还会积累额外的翻译,这实际上会导致孩子们在同一个方向"翻译两次"并远离他们的父母而不是保持相同的相对距离.
如果您抓住父O节点并旋转它,您希望子节点H节点也旋转,但在轨道中,因为旋转正由父节点执行.这按预期工作.
但是,如果你抓住一个子H节点并告诉它相对于它的父节点旋转,我预计只有孩子会以同样的方式绕其父节点绕轨道运行,但这不会发生.相反,孩子在其当前位置以更快的速度(例如,相对于其自身局部空间旋转的两倍)在其自身轴上旋转.
我真的希望这个描述足够公平,但如果不是,请告诉我,我会根据需要澄清.
我使用4×4 列优先矩阵(即Matrix4)和列向量(即Vector3,Vector4).
下面不正确的逻辑是我最接近正确的行为.请注意,我选择使用Java的像语法,运算符重载,使数学更容易在这里找到.当我以为我已经把它想出来的时候,我尝试了不同的东西,但我真的没有.
translate(Vector3 tv /* translation vector */, TransformSpace relativeTo):
switch (relativeTo):
case LOCAL:
localTranslation = localTranslation * TranslationMatrix4(tv);
break;
case PARENT:
if parentNode != null:
localTranslation = parentNode.worldTranslation …Run Code Online (Sandbox Code Playgroud) 我正在使用SciPy的boxcox函数对连续变量执行Box-Cox变换.
from scipy.stats import boxcox
import numpy as np
y = np.random.random(100)
y_box, lambda_ = ss.boxcox(y + 1) # Add 1 to be able to transform 0 values
Run Code Online (Sandbox Code Playgroud)
然后,我拟合一个统计模型来预测这个Box-Cox变换变量的值.模型预测是Box-Cox量表,我想将它们转换为变量的原始比例.
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
X = np.random.random((100, 100))
rf.fit(X, y_box)
pred_box = rf.predict(X)
Run Code Online (Sandbox Code Playgroud)
但是,在找到转换数据和lambda的情况下,我找不到执行反向Box-Cox变换的SciPy函数.有这样的功能吗?我现在编码一个逆变换.
pred_y = np.power((y_box * lambda_) + 1, 1 / lambda_) - 1
Run Code Online (Sandbox Code Playgroud) 从Android 3.0开始,我们可以使用setRotationX和setRotationY为视图设置基本的3D变换.
在一个特定的情况下,我需要实现一个复杂的变换,它围绕一个遥远的枢轴点旋转,然后在不同的枢轴点上缩放.由于它们共享相同的轴心点,因此无法简单地使用setScaleX/Y和setRotationX/Y.
是否存在任何简单的方法来为视图提供所需的矩阵以供显示?
目前,我找到了两种可能的解决方法:
设置旋转矩阵然后用它来映射{0,0}点; 将结果点应用于View的平移,然后使用View的setScaleX/Y设置缩放
破解View的onDraw并在画布上应用转换.添加逻辑以反转地图触摸事件.
两者都不是很方便,因为我正在构建一个使用可配置效果显示其项目的AdapterView; 例如,可以切换效果以使项目以圆圈形式排列或者像"封面流程"一样.