小编Mof*_*ast的帖子

随机百分比分支的编码模式?

因此,假设我们有一个代码块,我们希望执行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)

java random design-patterns

51
推荐指数
5
解决办法
4116
查看次数

JavaFX在虚拟平面上使用鼠标移动3D对象

当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.

这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°: 表示 我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.

所有帮助将不胜感激!

期望的结果: 之前

后

3d mouse raycasting javafx-8 javafx-3d

8
推荐指数
1
解决办法
5130
查看次数

3D矢量由2个角度定义

所以基本上我正在寻找一种方法来计算矢量的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分量应接近零.所有帮助将不胜感激.

math 3d vector

8
推荐指数
1
解决办法
1万
查看次数

在JavaFX中正确旋转3轴上的3D对象

所以我到目前为止用于在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度时会发生什么(实际上应该以透明蓝色旋转) 在此输入图像描述 我错过了什么吗?所有帮助将不胜感激.

java 3d javafx quaternions javafx-3d

6
推荐指数
1
解决办法
4381
查看次数