java 线绕点旋转_(JAVA)MyLine1(绕任一点旋转)

(JAVA)MyLine1(绕任一点旋转)

//实现功能:点鼠标时,线段绕一个端点旋转.每次15度

绕原点旋转的公式见"MyLine"

本例是端点1绕端点0(端点0不在原点)旋转.

由于端点0不在原点,所以不能直接使用旋转公式.

首先须将端点1平移,

若端点0的坐标为(X0,Y0),平移的向量就是:-(X0,Y0)

完成旋转计算后,再次平移端点1,平移的向量为(X0,Y0).

为了表述方便,以后我们称第一次平移为"原点平移",第二次平移为"复位平移"

当图形不是绕原点作旋转(或其它类型)变换时,都要先进行"原点平移",完成旋转计算后再作"复位平移"

import java.awt.Graphics;

import java.awt.Event;

import java.awt.event.*;

import java.applet.*;

public class MyLine1 extends Applet implements

MouseListener{

float

X[],Y[];

static

final double PI=3.1416;

public

void init(){

X=new float[2];

Y=new float[2];

X[0]=100;

Y[0]=100;

X[1]=50;

Y[1]=50;

addMouseListener(this);

}

public

void paint(Graphics g){

g.drawLine((int)X[0], (int)Y[0], (int)X[1], (int)Y[1]);

}

public void

mouseClicked(MouseEvent e) {

double

theta=15;

theta *= (PI

/ 180);

double mycos = Math.cos(theta);

double mysin = Math.sin(theta);

double XX,YY;

//绕(X[0],Y[0])旋转:

//"原点平移",平移的向量为-(X[0],Y[0])

XX=X[1]-X[0];

YY=Y[1]-Y[0];

//旋转

X[1]=(float)(XX*mycos-YY*mysin);

Y[1]=(float)(XX*mysin+YY*mycos);

//"复位平移", 平移的向量为(X[0],Y[0])

X[1]=X[1]+X[0];

Y[1]=Y[1]+Y[0];

repaint();

}

public void mousePressed(MouseEvent e) {

}

public void mouseReleased(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void

destroy() {

removeMouseListener(this);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值