问题:以鼠标输入为指导沿圆形路径移动一个点。
在线有很多解决方案可以沿着圆形路径移动一个点,即使用center + math.sin || cos(角度)* radius equation并递增角度。但是,这不适用于鼠标输入;即使在原始x / y值的一小部分,并转换为弧度,你的" circle"没有恒定的半径,路径点与鼠标的位置有奇怪的关系。
我的观察是路径点(圆周上的点)需要限制在离原点一定距离(强制半径)。我也觉得y需要是x或x的函数需要是y的函数。
我已经走上了使用距离公式来检查从路径点到圆心的距离。这个想法是为了那时候" snap" x和y值返回允许的距离 - 真正的距离但是...没有工作。也就是因为两点之间的距离和两点之间的差异(我如何开始理解它是两点之间的差异产生一个向量?) 。无论如何,我确信这是一个更直接的解决方案。
答案 0 :(得分:1)
不需要三角函数。 通过计算到中心的距离,你走在了一条很好的道路上。 想象一下从圆心到鼠标位置的矢量。 现在,重点必须放在同一个方向 作为这个向量,这意味着我们可以计算它的位置 用一个简单的scalar multiplication。唯一剩下的就是 计算标量,即比例 鼠标距离和圆半径之间:
package codeTest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
String filename = "sample.csv";
try(Stream<String> stream = Files.lines(Paths.get(filename))){
stream.forEach(System.out::println);
try {
File inputFile = new File("sample.csv");
File outputFile = new File("Output.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
String strLine;
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
while((strLine = reader.readLine()) != null){
list.add(strLine);
}
System.out.println("\nTEST OUTPUT..........................\n");
Stream<String> lineToRemove = list.stream().filter(x -> x.contains("yes"));
} catch(Exception e){
System.err.println("Error: " + e.getMessage());
}
}
}
}
答案 1 :(得分:0)
你可以使用圆的x,y原点和鼠标的x,y位置来计算鼠标和圆之间的角度:tan((y_mouse-y_circle)/(x_mouse-x_circle))
然后点的位置将是{ {1}}