台球是很常见的一种休闲方式。但是玩好它并不是那么容易的,于是,自己搞了个代码模拟了一下。简单研究其内在规律。
package basic.overrr; public class TableBallCalculator { /** * */ public static void main(String[] args) { // TODO Auto-generated method stub double a = 5.0; double c = 10.0; double b = Math.log10(c*c)/Math.log10(a*a); b = Math.pow(100-25, 0.5); b = b-1; System.out.println("b= :"+b); System.out.println("sin 1/2 :"+Math.sin(30 * Math.PI/180)); System.out.println("b= :"+Math.atan(b/5) *180.0 / Math.PI); TableBallCalculator t = new TableBallCalculator(); System.out.println("mainas :"+t.getAngles(8, 10, 0, 0)); } double a;// 假设已知 double b;// 假设已知 double c;// 假设未知 double d;// 假设未知 double _a;//角度alpha,以度记,非弧度。假设已知 以_开头表示角度 double _b;//角度beta 。假设已知 double _c;//角度西格玛------求出西格玛,然后返回90-西格玛 即为所求! /** * * 思路,先求c、后d,最后 _c ,返回 _b - (90 - _c) * * b 应该永远大于等于1 */ public double[] getAngles(double aa,double bb,double _aa,double _bb) { a = aa; b = bb; _a = _aa; _b = _bb; c = b * Math.cos(_b*Math.PI/180); _c = Math.atan(b * Math.sin(_b*Math.PI/180)/(c-1)); _c = _c * 180.0 / Math.PI; // return 90-_c; double _a$ = Math.atan(0.5/a) * 180.0 / Math.PI; System.out.println("偏角 _a$ :"+_a$); double best = Math.atan(b * Math.sin(_b*Math.PI/180)/((b * Math.cos(_b*Math.PI/180))-1)) * 180.0 / Math.PI-_b; _b = _b -_a$; double min = Math.atan(b * Math.sin(_b*Math.PI/180)/((b * Math.cos(_b*Math.PI/180))-1)) * 180.0 / Math.PI-_b; _b = _b + 2*_a$; double max = Math.atan(b * Math.sin(_b*Math.PI/180)/((b * Math.cos(_b*Math.PI/180))-1)) * 180.0 / Math.PI-_b; // System.out.println("最小角 _a$ :"+min); System.out.println("最佳角 _a$ :"+best); // System.out.println("最大角 _a$ :"+max); return new double[]{min,best,max}; } }
实得分
package basic.overrr; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Panel; import java.awt.Point; import java.awt.Toolkit; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class TableBallCanvas { public void init() { // TODO Auto-generated method stub } public static void main(String arg[]) { JFrame f = new JFrame("Paint"); f.setSize(1500, 1500); f.setVisible(true); MyPanel1 mp = new MyPanel1(); f.add(mp); f.setSize(1000,700); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } class MyPanel1 extends JPanel { // 覆盖JPanel的paint方法 public void paint(Graphics g) // Graphics是绘图的重要类,画笔类 {// paint(Graphic g)绘制组件的外观,repaint()刷新组件的外观 // 1.调用父类函数完成初始化 // 这句话,不能少 super.paint(g); g.drawLine(30, this.getHeight()-30, this.getWidth(), this.getHeight()-30); g.drawLine(30, 0, 30, this.getHeight()-30); g.drawString("O", 15,this.getHeight()-15); aa(g); for (int i = 0; i < this.getHeight()-30 ; i=i+50) { g.drawString(""+i/20, 8,this.getHeight()-30-i); } g.drawString("Y the distance B",this.getWidth(),this.getHeight()-15); goWithAngleB(g); } //angleB fixed to 45 private void goWithDistinceB(Graphics g) { double step = 0.1; TableBallCalculator tcc = new TableBallCalculator(); double aa = 5; double bb = 1; double _aa = 0; double _bb = 45; double[] angles = null; double oldX = 0; double oldY = 0; int multiply = 10; System.out.println("this.getHeight() : "+this.getHeight()); // 以横坐标为角度, 纵坐标为 最佳偏角 while (bb <= 20) { angles = tcc.getAngles(aa, bb, _aa, _bb); double best = angles[1]; Point point = new Point((int)(_bb*multiply),(int)(best*multiply)); // g.drawOval(point.x, point.y, 2, 2); g.drawLine((int)(oldX*multiply)+30,this.getHeight()-30-(int)(oldY*multiply), (int)(bb*multiply) +30,this.getHeight()-30-(int)(best*multiply)); if((int)bb%5==0) { } g.drawLine((int)(oldX*multiply)+30,this.getHeight()-300-(int)(bb/best), (int)(bb*multiply) +30,this.getHeight()-300-(int)(bb/best)); oldX = bb; oldY = best; bb = bb +0.1; // System.out.println("(_bb/best):==" + (_bb/best)); } for (int i = 1; i <= 20 ; i=i+2) { g.drawString(""+i,(int)(i*multiply)+30,this.getHeight()-15); } g.drawString("X the distance B",this.getWidth(),this.getHeight()-15); } private void goWithAngleB(Graphics g) { double step = 0.1; TableBallCalculator tcc = new TableBallCalculator(); double aa = 5; double bb = 5; double _aa = 0; double _bb = 0; double[] angles = null; double oldX = 0; double oldY = 0; int multiply = 20; System.out.println("this.getHeight() : "+this.getHeight()); // 以横坐标为角度, 纵坐标为 最佳偏角 while (_bb <= 80) { angles = tcc.getAngles(aa, bb, _aa, _bb); double best = angles[1]; Point point = new Point((int)(_bb*multiply),(int)(best*multiply)); // g.drawOval(point.x, point.y, 2, 2); g.drawLine((int)(oldX*multiply)+30,this.getHeight()-30-(int)(oldY*multiply), (int)(_bb*multiply) +30,this.getHeight()-30-(int)(best*multiply)); g.drawLine((int)(oldX*multiply)+30,this.getHeight()-30-(int)(_bb*180/best/Math.PI), (int)(_bb*multiply) +30,this.getHeight()-30-(int)((_bb*180/best/Math.PI))); oldX = _bb; oldY = best; _bb = _bb +0.1; //System.out.println("(_bb/best):==" + (_bb/best)); } for (int i = 1; i <= 80 ; i=i+2) { g.drawString(""+i,(int)(i*multiply)+30,this.getHeight()-15); } g.drawString("X the distance B",this.getWidth(),this.getHeight()-15); } }
个人认为,台球是很有技术含量的一种活动,对体力的要求不大。 远不像足球篮球。当然,这样比较没意思。乒乓球也是很有技术含量的。各有千秋。
后面看了相关视频,觉得受益匪浅。
参考:http://www.wasu.cn/Play/show/id/535488
http://www.wasu.cn/Play/show/id/495596
未完待续。。
相关推荐
台球技巧图解 格式:pdg
台球常见技巧的力学分析 呵呵 20字 麻烦啊 要的人下
打台球的基本技巧图解.doc
打台球如何瞄准技巧和要点图解.docx
该代码为作者本人在2002年下半年刚开始用到Delphi时,为了尽快熟悉函数、编程环境所做,代码中可能存在一些并不合理的Delphi用法和技巧:)而且,有的地方因为偷懒,代码比较乱;代码中有冗余代码,是在不断的改写...
现在滑动屏幕瞄准球,拖动力量条击球,炫耀技巧和专注力投入台球比赛,你就是未来世界锦标赛的台球大师。 与您的朋友一起玩有趣的迷你剪辑 8 球运动游戏!与传奇一起玩。 流行的休闲经典台球游戏,可在您的手机上...
精彩编程与编程技巧-趣味撞球——VB应用程序一例 ...
内容索引:JAVA源码,游戏娱乐,台球,Java游戏源码 Java台球... PoolTricker.rar 我自己写的,写得不怎么好,不过模仿地实现了一些击球技巧,如拉杆,推杆和跳杆……用到了CLDC1.1,所以顽童模拟器可能运行有点问题。
单人游戏模式:用户可以与电脑AI对战,通过上下左右键控制球拍移动,挑战自己的反应速度和技巧。 双人游戏模式:两个玩家可以在同一台电脑上进行对战,共享键盘,轮流操作球拍。 计分系统:游戏会实时显示双方的得分...
通过逐行分析源码,我们对系统的技术实现、API设计、业务逻辑等进行深入解读和分析,帮助开发者更好地理解源码和在其基础上进行二次开发,并提供更多开发思路和技巧。 总之,本资源适合对SpringBoot、Vue、校园台球...
本资源是一个校园台球厅人员与设备管理系统的完整开发源码,包括前端、后端、数据库等部分。该系统主要提供自媒体社区服务,实现自媒体账号管理、内容发布、用户互动等功能,提高自媒体推广效率和用户体验。该系统...
台球池游戏,免费给大家!你准备在这个虚拟的游泳馆里面挑战吗? 现在该展示这款台球游戏的所有技能了。 射击时要精确,以尽可能少的击球次数使球掉...在台球中表现出技巧,并以最少的击球次数丢球。 支持语言:English
Java台球游戏的一些核心源代码,实现了一些击球技巧,如拉杆,推杆和跳杆
求职必备---笔试技巧及应试准备 各大名企笔试中,常常会遇到逻辑思考题,考察应聘者的反应和能力和逻辑思维能力。 本文收录很多这类题目,对求职者有很大帮助 比如:一列火车上三个工人,史密斯――琼斯――罗伯特,...
PDF文件中的台球(台球)说明表和技巧。 免费开放给任何学习打台球的人。
通过该案例向读者介绍了在Android平台下进行3D游戏开发的相关知识和基本流程,并对游戏开发中的编程技巧进行了介绍,并主要介绍了篮球与地面、墙面及篮框的碰撞检测及运动动画的实现方法 第17章 益智类游戏——...
第19章 实用技巧汇集 19.1 布朗(随机)运动 19.2 随机分布 19.2.1 方形分布 19.2.2 圆形分布 19.2.3 偏移分布 19.3 基于定时器和时间的动画 19.3.1 基于定时器的动画 19.3.2 基于时间的动画 19.4 相同质量物体之间...
第19章 实用技巧汇集 19.1 布朗(随机)运动 19.2 随机分布 19.2.1 方形分布 19.2.2 圆形分布 19.2.3 偏向分布 19.3 基于定时器和时间的动画 19.3.1 基于定时器的动画 19.3.2 基于时间的动画 19.4 相同质量物体之间...