台球是很常见的一种休闲方式。但是玩好它并不是那么容易的,于是,自己搞了个代码模拟了一下。简单研究其内在规律。
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
未完待续。。
相关推荐
台球,又称桌球,最早起源于法国,后来在英国广为流传,并发展成为现代斯诺克和其他多种台球游戏的基础。台球运动的魅力在于它不仅需要良好的身体协调性和精准的物理计算能力,还要求玩家具备策略性思维。因此,台球...
台球,作为一种受广大玩家喜爱的体育项目,不仅考验玩家的技巧和经验,还蕴含着丰富的物理原理。在数字娱乐领域,将台球运动搬上虚拟游戏平台,不仅要求游戏制作者具备高超的编程技能,更需要深入理解台球运动的物理...
绝密台球教程汇编[整理].pdf》是一份宝贵的台球学习资料,它不仅涵盖了中式八球的基本技巧和策略,还详细介绍了瞄准方法、击球力度与分离角、杆法运用以及特殊球形的处理等技术细节。这份教程不仅适合台球初学者,...
它可能包含了斯诺克、直线球、翻袋等台球技巧的详细教程,帮助玩家在娱乐的同时,能够学习并掌握更多的台球技巧,提高自身的技术水平。 进阶玩家在熟悉了基本操作后,也会发现这款游戏同样能满足他们对于竞技和策略...
无论是独自练习还是与朋友竞赛,或是深入学习台球技巧,这款台球游戏都能满足PPC用户的期待,为他们提供了一个寓教于乐的游戏平台。对于那些喜欢台球运动,希望在便携设备上享受台球乐趣的用户来说,这款绿色版台球...
这些网站通常会包含台球技巧分享、赛程表、选手介绍、预约打球服务等功能模块。 【压缩包子文件的文件名称列表】中: 1. "ReadMe.txt"是一个常见的文档,通常包含模板的使用说明、版权信息、安装步骤和注意事项等,...
为了实现这一功能,开发者利用了数学原理和几何知识,为用户计算出了击打目标球的最佳角度和杆头对准位置,从而提高台球技巧和游戏体验。 首先,易语言台球瞄准器采用了易语言的图形用户界面(GUI)设计,使得用户...
由于强调不是游戏,我们可以推断这个项目可能是为了展示台球运动的物理原理,如弹道、角速度、碰撞反弹等,或者是作为教学辅助工具,帮助学习者理解台球技巧和策略。 在Flash中实现这样的功能,开发者可能使用了...
部门内的陪练员不仅需要具备专业的台球技巧,还需要具备良好的沟通和服务能力,以帮助不同水平的顾客提高技艺,或者为初学者提供基础指导。陪练服务的提供,不仅可以增加顾客粘性,还有助于提升台球部的专业形象。 ...
教学管理,交流台球技巧与策略;数据统计,赛事数据的自动化分析与呈现。整体上系统架构清晰,功能模块化,操作简便。 通过运用现代化的信息技术构建服务网站,该系统成功解决了台球赛事组织分散,信息不透明等问题...
本篇将详细探讨一款基于Unity3D的3D桌球(台球)游戏工程,通过源码分析,帮助读者深入理解游戏开发中的关键知识点。 首先,我们要明确这款游戏的核心特性:它不仅提供了丰富的游戏体验,如两种不同的打法(8球和9...
它不仅能够帮助玩家在工作间隙或闲暇时间放松身心,而且提供了一个学习台球规则、提升击球技巧的平台。无论是初学者还是台球高手,都能在这款游戏中找到适合自己的挑战和乐趣,体会到台球运动的独特魅力。《3D台球...
- **图像和图形**:高质量的台球图片和图标能增强用户体验,展示台球技巧、比赛瞬间或设备展示。 - **响应式设计**:考虑到用户可能使用不同设备访问网站,模板需具备响应式布局,确保在手机、平板电脑和桌面电脑...
【打台球技巧详解】 打台球是一项需要精确度和技巧的运动,对于初学者来说,经常遇到的问题是打歪球。以下是一些破解打歪球的方法,旨在帮助你提高击球准确性。 1. 握杆技巧:握杆时应尽量使用虎口的肉,使球杆与...
【标题】"趣味桌球源码-CocosCreator" 指的是一个基于CocosCreator游戏引擎开发的桌面台球游戏的源代码。CocosCreator是一款强大的2D游戏开发工具,它集成了完整的图形编辑器、物理引擎、脚本系统以及发布平台,使得...
而对于初学者和业余爱好者,系统则通过降低学习曲线,帮助他们更快地掌握台球技巧,享受台球运动的乐趣。 通过这份专题文档的学习,我们可以更加深入地了解到现代科技如何与传统体育项目相结合,并在不改变项目本质...
这款游戏机不仅能够满足孩子们对游戏的兴趣,还能通过模拟真实的台球运动,帮助他们学习基本的台球技巧和策略。 网络游戏的设计通常包括以下几个核心要素:游戏机制、图形界面、用户交互以及奖励系统。在"儿童台球...
活动宗旨在于确保比赛的公平性,让每一位参与者都能在友好的氛围中展示台球技巧,弘扬台球文化。 【活动主题与对象】 比赛的主题为“苏州科技学院电子与信息工程学院第一届‘名将杯’台球赛”。参赛对象涵盖石湖、...
【标题】"funcode桌球小游戏源码"指的是一个使用funcode编程语言开发的桌面台球游戏的源代码。这个项目可能是一个教学示例或个人练习,旨在帮助开发者熟悉funcode语言并提升游戏编程能力。 【描述】"符合指导书要求...