`
FlyAway2
  • 浏览: 111757 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

台球技巧

 
阅读更多

 

台球是很常见的一种休闲方式。但是玩好它并不是那么容易的,于是,自己搞了个代码模拟了一下。简单研究其内在规律。

 

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台球游戏软件

    此外,游戏可能还配备了各种技巧教学,如直线球、斯诺克、翻袋等,帮助新手迅速掌握台球技巧。对于进阶玩家,游戏可能设有不同的难度级别和挑战模式,以满足他们对竞技和策略的需求。 除了单人模式,此款3D台球游戏...

    kele8单机版,可以离线玩的台球。

    总的来说,kele8单机版是一个内容丰富的台球游戏,无论你是想在闲暇之余消遣娱乐,还是希望提升自己的台球技巧,它都是一个值得尝试的选择。通过这款游戏,玩家可以在离线状态下随时随地体验台球的魅力,享受台球...

    台球网站模板

    这些网站通常会包含台球技巧分享、赛程表、选手介绍、预约打球服务等功能模块。 【压缩包子文件的文件名称列表】中: 1. "ReadMe.txt"是一个常见的文档,通常包含模板的使用说明、版权信息、安装步骤和注意事项等,...

    PPC上可以玩的绿色版台球游戏

    这可能意味着游戏会有详细的规则解释,各种台球技巧的展示,以及可能的技能提升系统,帮助玩家提升自己的虚拟台球技艺。 综合以上信息,我们可以推测这款绿色版台球游戏是一款专为Pocket PC设计的便携式游戏,它...

    30天快速入门台球实战教程.zip

    这篇教程是专为想要在短时间内掌握台球技巧的初学者设计的。"30天快速入门台球实战教程"旨在通过系统的训练计划,让学习者在一个月内具备基本的台球实战能力。教程可能包括了基础理论、击球技巧、策略应用等多个方面...

    易语言台球瞄准器

    这款软件利用数学原理和几何知识,为用户计算出击打黑球或其他目标球时的最佳角度,以及杆头应该对准的位置,从而提高台球技巧和游戏体验。 易语言是一种简洁易懂、面向对象的编程语言,旨在让初学者也能快速上手...

    flash做的台球,不是游戏

    由于强调不是游戏,我们可以推断这个项目可能是为了展示台球运动的物理原理,如弹道、角速度、碰撞反弹等,或者是作为教学辅助工具,帮助学习者理解台球技巧和策略。 在Flash中实现这样的功能,开发者可能使用了...

    台球部部门职能(DOC格式).doc

    部门内的陪练员不仅需要具备专业的台球技巧,还需要具备良好的沟通和服务能力,以帮助不同水平的顾客提高技艺,或者为初学者提供基础指导。陪练服务的提供,不仅可以增加顾客粘性,还有助于提升台球部的专业形象。 ...

    基于SpringBoot和Vue的台球赛事服务网站的设计与实现

    教学管理,交流台球技巧与策略;数据统计,赛事数据的自动化分析与呈现。整体上系统架构清晰,功能模块化,操作简便。 通过运用现代化的信息技术构建服务网站,该系统成功解决了台球赛事组织分散,信息不透明等问题...

    3D桌球(台球)游戏工程,源码

    本篇将详细探讨一款基于Unity3D的3D桌球(台球)游戏工程,通过源码分析,帮助读者深入理解游戏开发中的关键知识点。 首先,我们要明确这款游戏的核心特性:它不仅提供了丰富的游戏体验,如两种不同的打法(8球和9...

    台球桌上的数学模型.doc

    数学建模在台球运动中扮演着重要角色,它能够帮助初学者理解和改进他们的台球技巧。台球桌上的数学模型主要涉及碰撞理论、几何定位和误差分析,以解决如何精确瞄准并击球入袋的问题。 首先,问题的核心在于建立台球...

    趣味桌球源码-CocosCreator

    【标题】"趣味桌球源码-CocosCreator" 指的是一个基于CocosCreator游戏引擎开发的桌面台球游戏的源代码。CocosCreator是一款强大的2D游戏开发工具,它集成了完整的图形编辑器、物理引擎、脚本系统以及发布平台,使得...

    台球网站模板下载

    - **图像和图形**:高质量的台球图片和图标能增强用户体验,展示台球技巧、比赛瞬间或设备展示。 - **响应式设计**:考虑到用户可能使用不同设备访问网站,模板需具备响应式布局,确保在手机、平板电脑和桌面电脑...

    打台球老是打歪的破解方法.docx

    【打台球技巧详解】 打台球是一项需要精确度和技巧的运动,对于初学者来说,经常遇到的问题是打歪球。以下是一些破解打歪球的方法,旨在帮助你提高击球准确性。 1. 握杆技巧:握杆时应尽量使用虎口的肉,使球杆与...

    网络游戏-儿童台球游戏机.zip

    这款游戏机不仅能够满足孩子们对游戏的兴趣,还能通过模拟真实的台球运动,帮助他们学习基本的台球技巧和策略。 网络游戏的设计通常包括以下几个核心要素:游戏机制、图形界面、用户交互以及奖励系统。在"儿童台球...

    funcode桌球小游戏源码

    【标题】"funcode桌球小游戏源码"指的是一个使用funcode编程语言开发的桌面台球游戏的源代码。这个项目可能是一个教学示例或个人练习,旨在帮助开发者熟悉funcode语言并提升游戏编程能力。 【描述】"符合指导书要求...

    2022大学生台球赛策划书[扫描版].pdf

    活动宗旨在于确保比赛的公平性,让每一位参与者都能在友好的氛围中展示台球技巧,弘扬台球文化。 【活动主题与对象】 比赛的主题为“苏州科技学院电子与信息工程学院第一届‘名将杯’台球赛”。参赛对象涵盖石湖、...

Global site tag (gtag.js) - Google Analytics