因此,假设我们有一个代码块,我们希望执行70%的次数,另一次执行30%的代码.
if(Math.random() < 0.7)
70percentmethod();
else
30percentmethod();
Run Code Online (Sandbox Code Playgroud)
很简单.但是如果我们希望它可以很容易地扩展到30%/ 60%/ 10%等怎么办?在这里,它需要添加和更改所有关于变化的if语句,这些语句不是很好用,慢和错误诱导.
到目前为止,我发现大型交换机对于这个用例非常有用,例如:
switch(rand(0, 10)){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:70percentmethod();break;
case 8:
case 9:
case 10:30percentmethod();break;
}
Run Code Online (Sandbox Code Playgroud)
哪个可以很容易地改为:
switch(rand(0, 10)){
case 0:10percentmethod();break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:60percentmethod();break;
case 8:
case 9:
case 10:30percentmethod();break;
}
Run Code Online (Sandbox Code Playgroud)
但是这些也有它们的缺点,很麻烦并且分成预定量的分区.
理想的东西将基于我想的"频率数"系统,如下所示:
(1,a),(1,b),(2,c) -> 25% a, 25% b, 50% c
Run Code Online (Sandbox Code Playgroud)
然后,如果你添加另一个:
(1,a),(1,b),(2,c),(6,d) -> 10% a, 10% b, 20% …Run Code Online (Sandbox Code Playgroud) 当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.
这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°:
我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.
所有帮助将不胜感激!
期望的结果:


所以基本上我正在寻找一种方法来计算矢量的x,y和z分量,使用2个角度,如图所示:
其中alpha是2D角度,beta是y角度.我现在一直在使用的2D矢量是:
x = Math.sin(alpha);
z = Math.cos(alpha);
Run Code Online (Sandbox Code Playgroud)
在stackexchange数学搜索后,我发现这个论坛不能正常工作:
x = Math.sin(alpha)*Math.cos(beta);
z = Math.sin(alpha)*Math.sin(beta);
y = Math.cos(beta);
Run Code Online (Sandbox Code Playgroud)
注意:当使用β角接近90度时,x和z分量应接近零.所有帮助将不胜感激.
所以我到目前为止用于在JavaFX中旋转对象的方法是我将它分成3组,每组都附加一个Rotate并锁定到单个轴,如下所示:
Rotate heading, roll, pitch;
Group normalrotate, rollrotate, verticalrotate;
heading.setAxis(new Point3D(0,1,0));
normalrotate.getTransforms().add(heading);
roll.setAxis(new Point3D(0,0,1));
rollrotate.getTransforms().add(roll);
pitch.setAxis(new Point3D(1,0,0));
verticalrotate.getTransforms().add(pitch);
Run Code Online (Sandbox Code Playgroud)
并且每次我需要旋转对象时都会执行setAngle().这对于前进和滚动非常有效,直到我决定我也需要投球.现在很多OpenGL等教程都说旋转的matix或四元数最适合这种类型的旋转,但是javadoc缺少任何有用的数据.
示例:当我在y轴上旋转对象180度时会发生什么(实际上应该以透明蓝色旋转)
我错过了什么吗?所有帮助将不胜感激.