import java.applet.Applet;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Image;

import net.java2000.tools.NoNull;

/**

* 一段眼睛跟着鼠标转动的跟踪眼代码。

* 你可以单独运行,或者放在html里面

*

* name="eyesApplet">

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

* @author 赵学庆,Java世纪网(java2000.net)

*

*/

public class Eye extends Applet {

private static final long serialVersionUID = 4124530672062457469L;

private String mErrorMessage;

private Image mFace;

private Color mIrisColor, mPupilColor = Color.black;

private int mMouseX, mMouseY;

private int mLeftEyeX, mLeftEyeY, mRightEyeX, mRightEyeY;

private int mLeftIrisX, mLeftIrisY, mRightIrisX, mRightIrisY;

private int mLeftPupilX, mLeftPupilY, mRightPupilX, mRightPupilY;

private int mIrisRadius, mPupilRadius;

private int mLeftEyeRadius, mRightEyeRadius, mLeftPupilTR, mRightPupilTR;

private int mVerticalOffset;

// 默认值

private int mFaceX = 0, mFaceY = 0; // image start at 0, 0

private int mIrisRed = 128, mIrisGreen = 64, mIrisBlue = 0;

private double mHorizontalSkew = 3.5, mEyeIndependence = 0.5, mGapFactor = 1.5;

private boolean mTestMode = false;

private Dimension mDimension;

private Image mImage;

private Graphics mGraphics;

public void init() {

mErrorMessage = null;

try {

// 设置的一些参数

// 背景的面部图片

mFace = getImage(getCodeBase(), NoNull.toString(getParameter("faceFile"), "doofus.jpg"));

// 左侧眼睛的x坐标

mLeftEyeX = mLeftIrisX = mLeftPupilX = Integer.parseInt(NoNull.toString(

getParameter("leftEyeX"), "75"));

// 左侧眼睛的y坐标

mLeftEyeY = mLeftIrisY = mLeftPupilY = Integer.parseInt(NoNull.toString(

getParameter("leftEyeY"), "77"));

// 右侧眼睛的x坐标

mRightEyeX = mRightIrisX = mRightPupilX = Integer.parseInt(NoNull.toString(

getParameter("rightEyeX"), "310"));

// 右侧眼睛的y坐标

mRightEyeY = mRightIrisY = mRightPupilY = Integer.parseInt(NoNull.toString(

getParameter("rightEyeY"), "75"));

// 眼睛的白眼球半径

mIrisRadius = Integer.parseInt(NoNull.toString(getParameter("irisRadius"), "20"));

// 眼睛的瞳孔半径

mPupilRadius = Integer.parseInt(NoNull.toString(getParameter("pupilRadius"), "8"));

// 左眼睛的移动半径

mLeftEyeRadius = Integer.parseInt(NoNull.toString(getParameter("leftEyeRadius"), "15"));

// 右眼睛的移动半径

mRightEyeRadius = Integer.parseInt(NoNull.toString(getParameter("rightEyeRadius"), "5"));

// 可选参数

if (getParameter("testMode") != null)

mTestMode = Boolean.valueOf(NoNull.toString(getParameter("testMode"), "true"))

.booleanValue();

if (getParameter("horizontalSkew") != null)

mHorizontalSkew = Double.valueOf(

NoNull.toString(getParameter("horizontalSkew"), "13.5")).doubleValue();

if (getParameter("eyeIndependence") != null)

mEyeIndependence = Double.valueOf(

NoNull.toString(getParameter("eyeIndependence"), "0.4")).doubleValue();

if (getParameter("irisRed") != null)

mIrisRed = Integer.parseInt(NoNull.toString(getParameter("irisRed"), "128"));

if (getParameter("irisGreen") != null)

mIrisGreen = Integer.parseInt(NoNull.toString(getParameter("irisGreen"), "64"));

if (getParameter("irisBlue") != null)

mIrisBlue = Integer.parseInt(NoNull.toString(getParameter("irisBlue"), "0"));

mIrisColor = new Color(mIrisRed, mIrisGreen, mIrisBlue);

if (getParameter("verticalOffset") != null)

mVerticalOffset = Integer.parseInt(NoNull.toString(getParameter("verticalOffset"),

"100"));

} catch (Exception e) {

mErrorMessage = "Bad or missing required parameter.";

e.printStackTrace();

}

// 计算眼球的移动半径

mLeftPupilTR = mLeftEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);

mRightPupilTR = mRightEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);

// 侦听鼠标事件

MouseMotion aMouseMotion = new MouseMotion();

this.addMouseMotionListener(aMouseMotion);

this.setSize(400, 135);

}

public void paintFrame(Graphics g) {

if (mErrorMessage != null) {

showError(g);

return;

}

// 背景面部

g.drawImage(mFace, mFaceX, mFaceY, this);

// 画外部的球体

g.setColor(mIrisColor);

g.fillOval(mLeftIrisX - mIrisRadius, mLeftIrisY - mIrisRadius, 2 * mIrisRadius,

2 * mIrisRadius);

g.fillOval(mRightIrisX - mIrisRadius, mRightIrisY - mIrisRadius, 2 * mIrisRadius,

2 * mIrisRadius);

// 画瞳孔

g.setColor(mPupilColor);

g.fillOval(mLeftPupilX - mPupilRadius, mLeftPupilY - mPupilRadius, 2 * mPupilRadius,

2 * mPupilRadius);

g.fillOval(mRightPupilX - mPupilRadius, mRightPupilY - mPupilRadius, 2 * mPupilRadius,

2 * mPupilRadius);

if (mTestMode) {

g.drawOval(mLeftEyeX - mLeftEyeRadius, mLeftEyeY - mLeftEyeRadius, 2 * mLeftEyeRadius,

2 * mLeftEyeRadius);

g.drawOval(mRightEyeX - mRightEyeRadius, mRightEyeY - mRightEyeRadius,

2 * mRightEyeRadius, 2 * mRightEyeRadius);

}

}

public void mouseMoved() {

// coordinates for the left iris

int leftDX = mMouseX - mLeftEyeX;

int leftDY = mMouseY - mLeftEyeY;

if (leftDY == 0)

leftDY = 1; // prevent divide by zero

double leftDXDY = (double) leftDX / leftDY;

double leftdy = Math.sqrt(Math.pow(mLeftEyeRadius, 2) / (Math.pow(leftDXDY, 2) + 1));

if (leftDY < 0) {

leftdy = -leftdy;

}

double leftdx = leftDXDY * leftdy * mHorizontalSkew;

// coordinates for the right iris

int rightDX = mMouseX - mRightEyeX;

int rightDY = mMouseY - mRightEyeY;

if (rightDY == 0)

rightDY = 1; // prevent divide by zero

double rightDXDY = (double) rightDX / rightDY;

double rightdy = Math.sqrt(Math.pow(mRightEyeRadius, 2) / (Math.pow(rightDXDY, 2) + 1));

if (rightDY < 0) {

rightdy = -rightdy;

}

double rightdx = rightDXDY * rightdy * mHorizontalSkew;

// adjustments for the irises

double avedx = (rightdx + leftdx) / 2;

double avedy = (rightdy + leftdy) / 2;

leftdx = leftdx + (avedx - leftdx) * (1 - mEyeIndependence);

rightdx = rightdx + (avedx - rightdx) * (1 - mEyeIndependence);

leftdy = leftdy + (avedy - leftdy) * (1 - mEyeIndependence);

rightdy = rightdy + (avedy - rightdy) * (1 - mEyeIndependence);

// new iris positions

mLeftIrisX = mLeftEyeX + (int) leftdx;

mLeftIrisY = mLeftEyeY + (int) leftdy;

mRightIrisX = mRightEyeX + (int) rightdx;

mRightIrisY = mRightEyeY + (int) rightdy;

// coordinates for the left pupil

double leftpdy = Math.sqrt(Math.pow(mLeftPupilTR, 2) / (Math.pow(leftDXDY, 2) + 1));

if (leftDY < 0) {

leftpdy = -leftpdy;

}

double leftpdx = leftDXDY * leftpdy * (mHorizontalSkew - mGapFactor);

// coordinates for the right pupil

double rightpdy = Math.sqrt(Math.pow(mRightPupilTR, 2) / (Math.pow(rightDXDY, 2) + 1));

if (rightDY < 0) {

rightpdy = -rightpdy;

}

double rightpdx = rightDXDY * rightpdy * (mHorizontalSkew - mGapFactor);

// adjustments for the pupils

double avepdx = (rightpdx + leftpdx) / 2;

double avepdy = (rightpdy + leftpdy) / 2;

leftpdx = leftpdx + (avepdx - leftpdx) * (1 - mEyeIndependence);

rightpdx = rightpdx + (avepdx - rightpdx) * (1 - mEyeIndependence);

leftpdy = leftpdy + (avepdy - leftpdy) * (1 - mEyeIndependence);

rightpdy = rightpdy + (avepdy - rightpdy) * (1 - mEyeIndependence);

// new pupil positions

mLeftPupilX = mLeftEyeX + (int) leftpdx;

mLeftPupilY = mLeftEyeY + (int) leftpdy;

mRightPupilX = mRightEyeX + (int) rightpdx;

mRightPupilY = mRightEyeY + (int) rightpdy;

repaint();

}

public void update(Graphics g) {

paint(g);

}

public void paint(Graphics g) {

Dimension d = getSize();

// create the offscreen graphics context

if ((mGraphics == null) || (d.width != mDimension.width)

|| (d.height != mDimension.height)) {

mDimension = d;

mImage = createImage(d.width, d.height);

mGraphics = mImage.getGraphics();

}

// erase the previous image

mGraphics.setColor(getBackground());

mGraphics.fillRect(0, 0, d.width, d.height);

mGraphics.setColor(Color.black);

// paint the frame into the image

paintFrame(mGraphics);

// paint the image onto the screen

g.drawImage(mImage, 0, 0, null);

}

class MouseMotion extends java.awt.event.MouseMotionAdapter {

public void mouseMoved(java.awt.event.MouseEvent event) {

Object object = event.getSource();

if (object == Eye.this)

mouseMovedInApplet(event);

}

}

void mouseMovedInApplet(java.awt.event.MouseEvent event) {

// get the mouse coords

mMouseX = event.getX();

mMouseY = event.getY();

mouseMoved();

}

public void mouseMovedInBrowser(int x, int y, int windowWidth) {

int appletW = getSize().width;

// adjust mouse x and y relative to applet position

mMouseX = x - (windowWidth - appletW) / 2;

mMouseY = y - mVerticalOffset;

mouseMoved();

}

private void showError(Graphics g) {

g.setFont(new Font("TimesRoman", Font.BOLD, 12));

g.drawString(mErrorMessage, 10, 20);

}

}

java鼠标经过代码_一段眼睛跟着鼠标转动的跟踪眼代码相关推荐

  1. 瞧一瞧看一看啦“一段眼睛跟着鼠标转动的跟踪眼代码”

    import java.applet.Applet; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; i ...

  2. java 鼠标动眼睛动_java实现眼睛跟着鼠标转动的跟踪眼代码

    import java.html" target="_blank">java.applet.Applet; import java.awt.Color; impor ...

  3. java ftpclient 代码_使用FTPClient连接文件服务器并做相应操作(代码)

    没有写摘要的习惯,就直接在这里写了. 首先搭建一个文件服务器,参考http://my.oschina.net/simpleton/blog/530081 然后就是客户端工具类代码(2015-11-16 ...

  4. tfs管理java代码_使用Intellij Idea连接Team Foundation Server (TFS)实现代码版本管理

    Intellij Idea是一个Java项目开发工具,支持Windows,MAC OS和Linux的跨平台开发环境,具备良好和智能的用户界面,在欧洲市场拥有很多粉丝.https://www.jetbr ...

  5. 有趣的html代码_千万别惹程序员,否则会在代码注释里,告诉这家公司有多坑...

    Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,都放在了文章结尾,欢迎前来领取! 每个程序员敲代码都 ...

  6. 运算阶乘的代码_【必修1】2.4可以复用的代码

    学习目标 ★了解函数的作用. ★学会函数的定义和调用方法,并能熟练使用函数解决问题. ★学会发布共享代码的常见方法,并能熟练使用模块解决问题. 本课要点 任务一  用自定义函数实现火柴摆数字问题 活动 ...

  7. winform 鼠标 静止时间_双飞燕飞时代FG30S鼠标评测,谁说静音手感不两全?

    " 我们的传统文化里,有着"鱼和熊掌不可兼得"的古语.确实,在很多时候,想要得到一些东西就必然会失去一些什么. "双飞燕飞时代FG30S无线静音鼠标但双飞燕的飞 ...

  8. 惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开

    2020年,可以说是英特尔最难受的一年,多年来的挤牙膏大法也不灵了,面对AMD更先进的7mm制程以及更多的线程数,加上本身更合理的售价,说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁.A ...

  9. php 工商银行公众号支付代码_微信支付PHP SDK之微信公众号支付代码详解

    这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是 ...

最新文章

  1. 在 Ubuntu Natty 中解除系统托盘限制
  2. WPF中获取鼠标相对于桌面位置
  3. 【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )
  4. gitlab不小心把sign-in取消了怎么恢复
  5. php语言中字符,PHP开发语言中字符窜的高效率写法
  6. Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体
  7. 【深入Java虚拟机】之一:Java内存区域与内存溢出
  8. 小程序底部弹窗css_微信小程序之animation底部弹窗动画(两种方法)
  9. nodejs的mysql初始化
  10. 机器学习实践指南(二)—— 正则化参数
  11. Wl,-rpath的格式问题,Wl,--rpath
  12. 微信公众号如何上传文档附件_公众号添加Excel、PDF、PPT等附件教程
  13. 花生壳覆盖安装,完全卸载,注册表
  14. 网页占满整个屏幕_css设置网页占满屏幕
  15. HbuilderX 启动微信小程序 无法打开项目
  16. PHP GD库 生成图片水印
  17. EPMS System Analysis——AD验证、权限设计
  18. HTML调用Java函数或语句,在动态THML语句中调用JS函数传递带空格参数的问题
  19. Xposed 探索之Hook 驾考宝典
  20. 成都敏之澳:拼多多关键词选词关键要素是什么?

热门文章

  1. ESP-Hosted 入门介绍 使用指南
  2. HBuilder开发旅游类APP(二) ----- mui结合H5+,快速实现首页、登录、注册等功能
  3. IT牛们的bat面试心得与经验总结
  4. Scrcpy-Android 设备投屏+控制工具--简略快捷键方便记忆
  5. 前端基础第一天:HTML常用标签知识点
  6. Vulnhub--bulldog
  7. 手把手教你Python+selenium爬虫百度文库源码+解析
  8. java 使用itext导出PDF文件,中文不显示问题解决
  9. 58同城2014校园招聘笔试题
  10. Lr_debug_message,Lr_output_message,Lr_error_message,Lrd_stmt,Lrd_fetch