台球是很常见的一种休闲方式。但是玩好它并不是那么容易的,于是,自己搞了个代码模拟了一下。简单研究其内在规律。
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格式呈现。台球是一项深受人们喜爱的室内运动,不仅需要精确的物理计算,还需要良好的策略规划和技巧执行。这份图解教程旨在帮助台球爱好者...
《台球常见技巧的力学分析》一文深入探讨了台球运动中常见技巧背后的物理学原理,特别是完全弹性碰撞、回滚、抛物线以及马格努斯力等关键概念的应用。文章作者刘喜斌(中国人民武装警察部队学院基础部)通过对台球...
总结来说,《台球游戏思路解析》涵盖了台球游戏的核心物理机制,包括碰撞理论、球速传递和切球技巧,这些知识对于理解台球运动和开发台球游戏至关重要。通过深入研究这些概念,无论是游戏开发者还是台球爱好者,都能...
此外,游戏可能还配备了各种技巧教学,如直线球、斯诺克、翻袋等,帮助新手迅速掌握台球技巧。对于进阶玩家,游戏可能设有不同的难度级别和挑战模式,以满足他们对竞技和策略的需求。 除了单人模式,此款3D台球游戏...
总的来说,kele8单机版是一个内容丰富的台球游戏,无论你是想在闲暇之余消遣娱乐,还是希望提升自己的台球技巧,它都是一个值得尝试的选择。通过这款游戏,玩家可以在离线状态下随时随地体验台球的魅力,享受台球...
这些网站通常会包含台球技巧分享、赛程表、选手介绍、预约打球服务等功能模块。 【压缩包子文件的文件名称列表】中: 1. "ReadMe.txt"是一个常见的文档,通常包含模板的使用说明、版权信息、安装步骤和注意事项等,...
这可能意味着游戏会有详细的规则解释,各种台球技巧的展示,以及可能的技能提升系统,帮助玩家提升自己的虚拟台球技艺。 综合以上信息,我们可以推测这款绿色版台球游戏是一款专为Pocket PC设计的便携式游戏,它...
这篇教程是专为想要在短时间内掌握台球技巧的初学者设计的。"30天快速入门台球实战教程"旨在通过系统的训练计划,让学习者在一个月内具备基本的台球实战能力。教程可能包括了基础理论、击球技巧、策略应用等多个方面...
这款软件利用数学原理和几何知识,为用户计算出击打黑球或其他目标球时的最佳角度,以及杆头应该对准的位置,从而提高台球技巧和游戏体验。 易语言是一种简洁易懂、面向对象的编程语言,旨在让初学者也能快速上手...
由于强调不是游戏,我们可以推断这个项目可能是为了展示台球运动的物理原理,如弹道、角速度、碰撞反弹等,或者是作为教学辅助工具,帮助学习者理解台球技巧和策略。 在Flash中实现这样的功能,开发者可能使用了...
部门内的陪练员不仅需要具备专业的台球技巧,还需要具备良好的沟通和服务能力,以帮助不同水平的顾客提高技艺,或者为初学者提供基础指导。陪练服务的提供,不仅可以增加顾客粘性,还有助于提升台球部的专业形象。 ...
教学管理,交流台球技巧与策略;数据统计,赛事数据的自动化分析与呈现。整体上系统架构清晰,功能模块化,操作简便。 通过运用现代化的信息技术构建服务网站,该系统成功解决了台球赛事组织分散,信息不透明等问题...
本篇将详细探讨一款基于Unity3D的3D桌球(台球)游戏工程,通过源码分析,帮助读者深入理解游戏开发中的关键知识点。 首先,我们要明确这款游戏的核心特性:它不仅提供了丰富的游戏体验,如两种不同的打法(8球和9...
数学建模在台球运动中扮演着重要角色,它能够帮助初学者理解和改进他们的台球技巧。台球桌上的数学模型主要涉及碰撞理论、几何定位和误差分析,以解决如何精确瞄准并击球入袋的问题。 首先,问题的核心在于建立台球...
【标题】"趣味桌球源码-CocosCreator" 指的是一个基于CocosCreator游戏引擎开发的桌面台球游戏的源代码。CocosCreator是一款强大的2D游戏开发工具,它集成了完整的图形编辑器、物理引擎、脚本系统以及发布平台,使得...
- **图像和图形**:高质量的台球图片和图标能增强用户体验,展示台球技巧、比赛瞬间或设备展示。 - **响应式设计**:考虑到用户可能使用不同设备访问网站,模板需具备响应式布局,确保在手机、平板电脑和桌面电脑...
【打台球技巧详解】 打台球是一项需要精确度和技巧的运动,对于初学者来说,经常遇到的问题是打歪球。以下是一些破解打歪球的方法,旨在帮助你提高击球准确性。 1. 握杆技巧:握杆时应尽量使用虎口的肉,使球杆与...
这款游戏机不仅能够满足孩子们对游戏的兴趣,还能通过模拟真实的台球运动,帮助他们学习基本的台球技巧和策略。 网络游戏的设计通常包括以下几个核心要素:游戏机制、图形界面、用户交互以及奖励系统。在"儿童台球...
【标题】"funcode桌球小游戏源码"指的是一个使用funcode编程语言开发的桌面台球游戏的源代码。这个项目可能是一个教学示例或个人练习,旨在帮助开发者熟悉funcode语言并提升游戏编程能力。 【描述】"符合指导书要求...
活动宗旨在于确保比赛的公平性,让每一位参与者都能在友好的氛围中展示台球技巧,弘扬台球文化。 【活动主题与对象】 比赛的主题为“苏州科技学院电子与信息工程学院第一届‘名将杯’台球赛”。参赛对象涵盖石湖、...