我正在玩一个粒子模拟器,我想使用matplotlib与python和numpy尽可能高效地制作尽可能逼真的模拟器(这纯粹是一个有趣的练习python)我有一个问题试图计算距离的倒数.
我有一个包含粒子(x,y)位置的数组,如下所示:
x = random.randint(0,3,10).reshape(5,2)
>>> x
array([[1, 1],
[2, 1],
[2, 2],
[1, 2],
[0, 1]])
Run Code Online (Sandbox Code Playgroud)
这是在[0,3]中具有位置(x,y)的5个粒子.现在,如果我想计算一个粒子(比如粒子与位置(0,1))和其余粒子之间的距离,我会做类似的事情
>>>x - [0,1]
array([[1, 0],
[2, 0],
[2, 1],
[1, 1],
[0, 0]])
Run Code Online (Sandbox Code Playgroud)
问题是我不想将粒子的距离带到自身:(0,0).这具有长度0并且倒数是无穷大的并且没有针对重力或coloumb力定义.
所以我试过了:哪里(x == [0,1])
>>>where(x==[0,1])
(array([0, 1, 4, 4]), array([1, 1, 0, 1]))
Run Code Online (Sandbox Code Playgroud)
这不是x数组中(0,1)粒子的位置.那么如何从像x这样的数组中选出[0,1]的位置呢?上面的where()检查x等于0或1的位置,而不是x等于[0,1]的位置.如何在没有循环的情况下执行此"numpylike"?
Ps:如何将frack复制粘贴到stackoverflow?我的意思是坏论坛有一个[code] .. [/ code]选项,而在这里我花了15分钟正确缩进代码(因为在ubuntu上的chrome中的tab只是跳出窗口而不是缩进4个空格....)非常烦人
编辑:看到我尝试的第一个答案:
x
array([[0, 2],
[2, 2],
[1, 0],
[2, 2],
[1, 1]])
>>> all(x==[1,1],axis=1)
array([False, False, False, False, True], dtype=bool)
>>> all(x!=[1,1], axis=1)
array([ True, True, False, True, …Run Code Online (Sandbox Code Playgroud) 以下版本的for 循环是否可能(或其变体,以满足用一行缩短代码的目的)?
for(String string: stringArray; string.toLowerCase()){
//stuff
}
Run Code Online (Sandbox Code Playgroud)
代替
for(String string: stringArray){
string = string.toLowerCase();
//stuff
}
Run Code Online (Sandbox Code Playgroud)
可能看起来是一个愚蠢的问题,但是当它应用于循环的每个元素时,一直写这一行是很烦人的。
我想知道c中是否可以使用以下内容
int a; int b;
a = somefunc();
lots of stuff here that change the value of a
Run Code Online (Sandbox Code Playgroud)
我想要的是反映a存储在变量中的任何时候的值b.a==b
我想避免b = a在打电话后somefunc()和每隔一段时间做一些事情a.为代码添加混乱.
假设我在 上有 N 层StackPane,我在 上进行混合、绘图、图像、矩形等StackPane。我将如何保存结果?即我的屏幕上显示的内容StackPane。
一般来说,假设我有任何可绘制的 JavaFX 元素,我将如何将该特定元素绘制到图像文件中。
我知道 swing 会提供它来getGraphics()直接绘制到图像的像素缓冲区,但我找不到任何类似的Node或Pane。
假设我想创建一个执行以下操作的匿名函数
f: [a, b] -> [a^2, b/2]
Run Code Online (Sandbox Code Playgroud)
由于操作不同a,b我无法弄清楚如何操作.这在matlab中是否可行?我的函数会有约束R^2 -> R^2
我不知道为什么我会得到一个超大的窗口,这让我在游戏窗口中运行箍以适应我的精灵.构造函数应该使所有子组件都适合彼此,但似乎画布或框架中有一些额外的填充.我很难搞清楚罪魁祸首是什么.我的框架尺寸不应大于800x600(不包括OS装饰,谈论容器).
Panel: java.awt.Rectangle[x=0,y=0,width=810,height=610]
Frame: java.awt.Rectangle[x=0,y=0,width=816,height=638]
Canvas:java.awt.Rectangle[x=0,y=0,width=816,height=638]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,边界大于我指定的范围.
班级:
public class GameFrame {
private JFrame frame;
private JPanel panel;
private Canvas canvas;
private BufferStrategy bufferStrategy;
private Graphics2D g;
private int width;
private int height;
public GameFrame(Color bgColor) {
this.width = GameEngine.GAMEDIMENSION[0]; // 800
this.height = GameEngine.GAMEDIMENSION[1]; // 600
this.frame = new JFrame();
this.panel = (JPanel) frame.getContentPane();
this.panel.setPreferredSize(new Dimension(width, height));
this.panel.setLayout(null);
this.panel.setBackground(bgColor);
this.canvas = new Canvas();
this.canvas.setBounds(0, 0, width, height);
this.canvas.setIgnoreRepaint(true);
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frame.pack();
this.frame.setResizable(false);
this.frame.setVisible(true);
this.panel.add(canvas);
this.canvas.createBufferStrategy(2);
this.bufferStrategy = canvas.getBufferStrategy();
this.g = …Run Code Online (Sandbox Code Playgroud) 为什么我允许在类范围中实例化字段但不允许在这些字段上调用方法?
public class MethodInFieldTest {
List<Object> list = new ArrayList<>();
// compilation error
// list.add(new Object());
// Compiles just fine, how I usually do it
{
list.add(new Object());
}
// compilation error
// addObject();
public void addObject() {
list.add(new Object());
}
//usual way of handling this
//constructor one
public MethodInFieldTest(... stuff) {
list.add(new Object());
}
//constructor two
public MethodInFieldTest(..) {
list.add(new Object());
}
//etc
//...
//ugly way of doing it
// List<Object> list = new ArrayList<>(Arrays.asList(new Object[]{new Object(), new Object()})); …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,我希望是因为我不善于编写QML而不是因为Qt中的一些基本错误.
每当我在水平方向(宽度更改)调整应用程序窗口大小时,窗口不会调整到我释放鼠标的位置,而是"快照"回到其最小宽度.我已设法将其剥离到重现该bug的最基本要求.
main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
ApplicationWindow {
id: root
visible: true
minimumHeight: 768
minimumWidth: 1024
title: qsTr("Test")
color: "#292525"
Item {
width: 0.9*parent.width
height: 0.1*parent.height
}
}
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
我注意到一些非常奇怪的东西(最终导致我的游戏崩溃),Thread.sleep()我无法弄清楚问题可能是什么.我连续两个小时运行以下方法,输出总是100 + -5;
public void gameLoop() {
t0 = time();
while (GameState.getInstance().getState() == GameCondition.RUNNING) {
engine.update();
sfx.play();
t1 = time();
delta = t1 - t0;
gfx.render((int) delta);
t0 = time();
System.out.println(delta);
sleep(100);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行完全相同的方法,而不是睡觉的常数100我睡觉 delta
public void gameLoop() {
t0 = time();
while (GameState.getInstance().getState() == GameCondition.RUNNING) {
engine.update();
sfx.play();
t1 = time();
delta = t1 - t0;
gfx.render((int) delta);
t0 = time();
System.out.println(delta);
sleep(delta);
}
}
Run Code Online (Sandbox Code Playgroud)
现在输出如下:
0
1
1
1
1
1
1
1
1
1 …Run Code Online (Sandbox Code Playgroud) 我的C有点生锈。假设我有以下内容
char* (*funcs[n])(void);
Run Code Online (Sandbox Code Playgroud)
我将如何定义或声明另一个函数将此数组作为参数。我尝试过
void func(char* (*p)(void));
Run Code Online (Sandbox Code Playgroud)
但是海湾合作委员会抱怨。