gpt4 book ai didi

math - 放大鼠标指向的位置

转载 作者:行者123 更新时间:2023-12-04 10:24:02 24 4
gpt4 key购买 nike

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

这是我的代码:

主类

Planeta sun = new Planeta(color(235, 225, 52), 0, 696000, 0, 0);
Planeta mercury = new Planeta(color(166, 142, 88), 57909170, 2439, 0, 87.989);
Planeta venus = new Planeta(color(250, 193, 50), 108208926, 6052, 0, 224.701);

color stroke = color(70, 70, 70, 70);

int sx, sy;
int centerX, centerY;
static float m1 = 1000;
public static float magn = 1/m1;

void setup() {
fullScreen();
background(0);
sx = width/2;
sy = height/2;
ellipseMode(RADIUS);
stroke(stroke);
strokeWeight(3);
centerX = width/2;
centerY = height/2;
}

void draw() {
magn = 1/m1;
background(0);
translate(sx, sy);

sun.drawOrbit();
sun.drawPlanet();

mercury.drawOrbit();
mercury.drawPlanet();

venus.drawOrbit();
venus.drawPlanet();


if(mousePressed) {
float wx = mouseX - pmouseX;
float wy = mouseY - pmouseY;

sx += wx;
sy += wy;
}
}

void mouseWheel(MouseEvent event) {
float e = float(event.getCount())*m1/3;
if(m1+e > 0.2) {
m1 += e;
}
}

二等舱

class Planeta {
color c;
float distance;
float radius;
float angle;
float orbit_time;

Planeta(color kolor, float dystans, float promien, float kat, float czas) {
this.c = kolor;
this.distance = dystans/100;
this.radius = promien/100;
this.angle = kat;
this.orbit_time = czas;
}

public PVector getPos() {
float x = this.distance*sin(this.angle);
float y = this.distance*cos(this.angle);
return new PVector(x, y);
}


public void drawOrbit() {
noFill();
circle(0, 0, this.distance*magn);
}

public void drawPlanet() {
fill(this.c);
PVector pos = getPos();
circle(pos.x*magn, pos.y*magn, this.radius*magn);
}
}

sx 和 sy 用于平移,centerX 和 centerY 是常数,magn 和 m1 用于缩放。

所以移动行星就像一个魅力,但我不知道如何放大/缩小到我的鼠标所在的位置。我在谷歌上搜索过代码,没有任何效果。

我感谢每一个帮助。

最佳答案

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

float sx, sy;

您必须根据比例因子的变化来更改翻译。
计算比例因子的相对变化:

float fromM = m1;
float toM = m1 + e;
float scaleRel = fromM / toM;

计算从鼠标光标到当前翻译的距离:

float dx = mouseX - sx;
float dy = mouseY - sy;

根据鼠标光标到当前平移的距离( dxdy )和相对比例的增量( 1 - scaleRel )更改平移:

sx += dx * (1.0-scaleRel);
sy += dy * (1.0-scaleRel);

例如:



void mouseWheel(MouseEvent event) {
float e = float(event.getCount())*m1/3;
if(m1+e > 0.2) {
float fromM = m1;
float toM = m1 + e;
float scaleRel = fromM / toM;
float dx = mouseX - sx;
float dy = mouseY - sy;
sx += dx * (1.0-scaleRel);
sy += dy * (1.0-scaleRel);
m1 = toM;
}
}

关于math - 放大鼠标指向的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60707703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com