Math 放大鼠标指向的位置

Math 放大鼠标指向的位置,math,processing,mouse,Math,Processing,Mouse,我正在写太阳系符号,我需要能够放大/缩小鼠标指向的位置。到目前为止,我得到的是移动行星和放大/缩小点(0,0)的位置 这是我的密码: 主类 Planeta sun=新的Planeta(颜色(235,225,52),0,696000,0,0); Planeta mercury=新Planeta(颜色(166、142、88)、579091702439、0、87.989); 金星行星=新行星(颜色(25019350),1082089266052,0224.701); 颜色笔划=颜色(70,70,70,

我正在写太阳系符号,我需要能够放大/缩小鼠标指向的位置。到目前为止,我得到的是移动行星和放大/缩小点(0,0)的位置

这是我的密码:

主类

Planeta sun=新的Planeta(颜色(235,225,52),0,696000,0,0);
Planeta mercury=新Planeta(颜色(166、142、88)、579091702439、0、87.989);
金星行星=新行星(颜色(25019350),1082089266052,0224.701);
颜色笔划=颜色(70,70,70,70);
int-sx,sy;
int centerX,centerY;
静态浮点数m1=1000;
公共静态浮磁=1/m1;
无效设置(){
全屏();
背景(0);
sx=宽度/2;
sy=高度/2;
椭圆模型(半径);
中风(中风);
冲程重量(3);
centerX=宽度/2;
中心Y=高度/2;
}
作废提款(){
magn=1/m1;
背景(0);
翻译(sx,sy);
sun.drawOrbit();
太阳行星();
水星;
水星,行星();
金星轨道();
金星。行星();
如果(鼠标按下){
float wx=mouseX-pmouseX;
float wy=mouseY-pmouseY;
sx+=wx;
sy+=wy;
}
}
作废鼠标滚轮(鼠标事件){
float e=float(event.getCount())*m1/3;
如果(m1+e>0.2){
m1+=e;
}
}
二等舱

平面类{
颜色c;
浮动距离;
浮动半径;
浮动角;
浮动轨道时间;
Planeta(颜色kolor、浮色Dysans、浮色promien、浮色kat、浮色czas){
这个.c=kolor;
这个距离=1/100;
该半径=promien/100;
这个角度=kat;
this.orbit_time=czas;
}
公共PVector getPos(){
浮动x=此距离*sin(此角度);
浮动y=此距离*cos(此角度);
返回新的PVector(x,y);
}
公共空间{
noFill();
圆(0,0,这个。距离*magn);
}
公共空间{
填充(本节第c节);
PVector pos=getPos();
圆(x位置*磁,y位置*磁,此半径*磁);
}
}
sx和sy表示平移,centerX和centerY表示常量,magn和m1表示缩放

所以移动的行星就像一个魔咒,但我不知道如何放大/缩小鼠标所在的点。我在谷歌上搜索过代码,但没有找到适合我的


非常感谢您的帮助。

我建议使用浮点变量进行翻译,以提高准确性:

float-sx,sy;
根据比例因子的变化,您必须更改转换。
计算比例因子的相对变化:

float fromM=m1;
浮动toM=m1+e;
浮点数=fromM/toM;
计算鼠标光标到当前平移的距离:

float dx=mouseX-sx;
float dy=mouseY-sy;
根据鼠标光标的距离将平移更改为当前平移(
dx
dy
)和相对比例的增量(
1-scaleRel
):

sx+=dx*(1.0-scaleRel);
sy+=dy*(1.0-scaleRel);
e、 g:

void mouseWheel(MouseEvent事件){
float e=float(event.getCount())*m1/3;
如果(m1+e>0.2){
float fromM=m1;
浮动toM=m1+e;
浮点数=fromM/toM;
浮动dx=鼠标x-sx;
float dy=mouseY-sy;
sx+=dx*(1.0-scaleRel);
sy+=dy*(1.0-scaleRel);
m1=汤姆;
}
}