java 上下左右移动_求解,上下左右左上右上左下右下移动该怎么完成(eclipse)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

package com;

import java.awt.Graphics;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.JFrame;

public class Main_JFrame extends JFrame implements KeyListener{

private int GAME_WIDTH=300;

private int GAME_HEIGHT=300;

private int X_SPEED=2;

private int Y_SPEED=1;

private int img_x=100;

private int img_y=100;

private BufferedImage img=null;

private String file="捕获.PNG";

private boolean pressflag;

private boolean up=false;

private boolean down=false;

private boolean left=false;

private boolean right=false;

public Main_JFrame()

{

try {

img=ImageIO.read(new File(file));

} catch (IOException e) {}

setSize(GAME_WIDTH,GAME_HEIGHT);

setVisible(true);

pressflag=false;

paint(this.getGraphics());

this.addKeyListener(this);

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

new Main_JFrame();

}

public void paint(Graphics g)

{

super.paint(g);

g.drawImage(img, img_x, img_y, this);

}

public void repaint()

{

super.repaint();

}

@Override

public void keyTyped(KeyEvent e) {

// TODO 自动生成的方法存根

}

public void keyPressed(final KeyEvent e) {

// TODO 自动生成的方法存根

if(pressflag)

{

return;

}

pressflag = true;

new Thread()

{

public void run()

{

while(pressflag)

{

System.out.print(e.getKeyCode());

switch(e.getKeyCode())

{

case KeyEvent.VK_UP:

up=true;

//img_y-=Y_SPEED;

break;

case KeyEvent.VK_DOWN:

down=true;

//img_y+=Y_SPEED;

break;

case KeyEvent.VK_LEFT:

left=true;

//img_x-=X_SPEED;

break;

case KeyEvent.VK_RIGHT:

right=true;

//img_x+=X_SPEED;

break;

}

if(up==false&&down==true&&left==true&&right==false)//左下

{

img_y+=Y_SPEED;

img_x-=X_SPEED;

System.out.print(1);

}

else if(up==true&&down==false&&left==true&&right==false)//左上

{

img_y-=Y_SPEED;

img_x-=X_SPEED;

System.out.print(2);

}

else if(up==false&&down==true&&left==false&&right==true)//右下

{

img_y+=Y_SPEED;

img_x+=X_SPEED;

System.out.print(3);

}

else if(up==true&&down==false&&left==false&&right==true)//右上

{

img_y-=Y_SPEED;

img_x+=X_SPEED;

System.out.print(4);

}

else if(up==true&&down==false&&left==false&&right==false)

{

img_y-=Y_SPEED;

}

else if(up==false&&down==true&&left==false&&right==false)

{

img_y+=Y_SPEED;

}

else if(up==false&&down==false&&left==true&&right==false)

{

img_x-=X_SPEED;

}

else if(up==false&&down==false&&left==false&&right==true)

{

img_x+=X_SPEED;

}

repaint();

try {

Thread.sleep(8);

} catch (InterruptedException e) {}

}

}

}.start();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO 自动生成的方法存根

int i=e.getKeyCode();

switch(i)

{

case KeyEvent.VK_UP: up=false; break;

case KeyEvent.VK_DOWN: down=false; break;

case KeyEvent.VK_LEFT: left=false; break;

case KeyEvent.VK_RIGHT: right=false; break;

}

pressflag = false;

}

}

这程序不能斜着走,想斜着走的话又会有延迟,鱼和熊爪该怎么兼得??

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据左相机中成像坐标求解空间坐标的过程称为立体视觉三角化。具体步骤如下: 1. 标定相机,得到相机内参和外参矩阵。 2. 对左两个相机拍摄到的同一场景进行特征点匹配,得到左图像中的对应点。 3. 根据匹配点对,计算左相机之间的基础矩阵或本质矩阵。 4. 对于一个目标点,假设其在左相机中的成像坐标分别为(x_L, y_L)和(x_R, y_R),则可以通过以下公式计算其在空间中的坐标(X, Y, Z): X, Y, Z = triangulate(x_L, y_L, x_R, y_R, P_L, P_R) 其中,P_L和P_R分别为左相机的投影矩阵,triangulate()函数为三角化函数,可以使用OpenCV等库中的函数实现。 需要注意的是,在进行三角化计算时,需要进行坐标系变换,将左相机的坐标系统一起来。 以下是Python代码示例: ```python import cv2 import numpy as np # 左相机内参矩阵和投影矩阵 K_L = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) K_R = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) R = np.array([[r11, r12, r13], [r21, r22, r23], [r31, r32, r33]]) t = np.array([tx, ty, tz]) P_L = np.dot(K_L, np.hstack((np.identity(3), np.zeros((3, 1))))) P_R = np.dot(K_R, np.hstack((R, t.reshape(3, 1)))) # 左相机中的匹配点对 pts_L = np.array([[x1_L, y1_L], [x2_L, y2_L], ... [xn_L, yn_L]]) pts_R = np.array([[x1_R, y1_R], [x2_R, y2_R], ... [xn_R, yn_R]]) # 计算基础矩阵或本质矩阵 F, mask = cv2.findFundamentalMat(pts_L, pts_R, cv2.FM_RANSAC) E = np.dot(np.dot(K_R.T, F), K_L) # E = np.dot(np.dot(R, np.diag([1, 1, 0])), R.T) # 如果已知R,则可直接计算本质矩阵 # 三角化计算 def triangulate(x_L, y_L, x_R, y_R, P_L, P_R): A = np.zeros((4, 4)) A[0, :] = x_L * P_L[2, :] - P_L[0, :] A[1, :] = y_L * P_L[2, :] - P_L[1, :] A[2, :] = x_R * P_R[2, :] - P_R[0, :] A[3, :] = y_R * P_R[2, :] - P_R[1, :] _, _, V = np.linalg.svd(A) X = V[-1, :3] / V[-1, 3] return X X = triangulate(x_L, y_L, x_R, y_R, P_L, P_R) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值