检测一个点, 是否在一个半圆之内的方法

demo: http://jsbin.com/lihiwigaso

 

需求: 一个圆分成分部分, 鼠标滑上不同的区域显示不同的颜色

思路: 先判断这个点是否在圆之内, 再判断是否在所在的三角形之内就可以了

所需要的全部源码:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>point-in-semicircle</title><script src="jquery-1.7.2.min.js"></script>
<style>
body{border:0;margin:0;padding:0;
}
#bottom {position: absolute;left:0px;top:0px;width: 200px;height: 200px;border: 1px solid red;
}#circleProcess {position: relative;top: 0;left: 0;width: 200px;height: 200px;stroke-dasharray: 360%;stroke-dashoffset: 0%;stroke: #6FEC6F;fill: none;-webkit-transform: rotate(-90deg);-moz-transform: rotate(-90deg);-ms-transform: rotate(-90deg);-o-transform: rotate(-90deg);transform: rotate(-90deg);
}#left {position: absolute;top: 0px;left: 0px;height: 100px;width: 200px;border-radius: 100px 100px 0 0;-moz-border-radius: 100px 100px 0 0;-webkit-border-radius: 100px 100px 0 0;background:red;transform: rotate(-45deg);-moz-transform: rotate(-45deg);-webkit-transform: rotate(-45deg);transform-origin: 100px 100px;-moz-transform-origin: 100px 100px;-webkit-transform-origin: 100px 100px;display:none;}#right {position: absolute;top: 100px;left: 0px;height: 100px;width: 200px;border-radius: 0 0 100px 100px;-moz-border-radius: 0 0 100px 100px;-webkit-border-radius: 0 0 100px 100px;background:blue;transform: rotate(-45deg);-moz-transform: rotate(-45deg);-webkit-transform: rotate(-45deg);transform-origin: 100px 0px;-moz-transform-origin: 100px 0px;-webkit-transform-origin: 100px 0px;display:none;
}#top {position: absolute;left: 0px;top: 0px;width: 200px;height: 200px;z-index: 100px;
}</style>
</head>
<body>
<div id="bottom">
<svg id="circleProcess" xmlns="http://www.w3.org/2000/svg">
<circle id="circle" cx="100" cy="100" r="100" stroke-width="5" stroke-dashoffset="0%"></circle>
</svg>
<div id="left"></div>
<div id="right"></div>
</div>
<div id="top"></div>
</body>
</html>
<script>
jQuery(function($){var polygons = [[[0, 0], [200, 0], [100, 100], [0, 200]],[[100, 100], [200, 0], [200, 200], [0, 200]]];var $left = $('#left');var $right = $('#right');var $top = $('#top');var oldIndex = -1;$top.on('mousemove', function(e){if( pointInsideCircle([e.offsetX, e.offsetY],[100, 100], 100) ){var index = inside([e.offsetX, e.offsetY], polygons);if(index===oldIndex){return;}if (index === 0) {$left.show();$right.hide();}if (index === 1) {$left.hide();$right.show();}oldIndex = index;} else {$left.hide();$right.hide();oldIndex = -1;}});$top.on('mouseleave', function(){$left.hide();$right.hide();oldIndex = -1;});function inside(point, polygons){for(var i=1; i>=0; i--){if(pointInsidePolygon(point, polygons[i])){return i;}}return -1;}function pointInsidePolygon(point, vs) {// ray-casting algorithm based on// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.htmlvar x = point[0], y = point[1];var inside = false;for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {var xi = vs[i][0], yi = vs[i][1];var xj = vs[j][0], yj = vs[j][1];var intersect = ((yi > y) != (yj > y))&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);if (intersect) inside = !inside;}return inside;}function pointInsideCircle(point, circle, r) {if (r===0) return falsevar dx = circle[0] - point[0]var dy = circle[1] - point[1]return dx * dx + dy * dy <= r * r}});
</script>

  

转载于:https://www.cnblogs.com/zlog/p/6109223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

台式计算机风扇声音大怎么处理,如何解决电脑电源风扇声音大的问题?

现在的台式机一般用3到5年后&#xff0c;一些问题自然也就慢慢表现出来了。很多网友在使用电脑过程中都有电脑风扇声音大怎么办的问题&#xff0c;电脑风扇声音大就会让人觉得使用电脑很不舒服&#xff0c;怎么办好呢&#xff1f;出现重要的问题要如何解决好呢&#xff1f;现在…

计算机应用 winxp,2017年职称计算机考试模块WindowsXP试题

2017年职称计算机考试模块WindowsXP试题全国专业技术人员计算机应用能力考试是专业技术人员资格考试的一种。接下来应届毕业生小编为大家搜索整理了2017年职称计算机考试模块WindowsXP试题&#xff0c;希望大家有所帮助。1. Windows XP中删除某个文件的快捷方式【 A 】。A. 对原…

Python基础(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重复   2 下次重复一定是基于上一次的结果而来 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代举例2、可迭代对象 可进行.__iter__()操作的为可迭代对象 #print(isinstance(str1,Iterable)),判断str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域请求数居&#xff0c;报错 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 参考&#xff1a;stackoverflow 未解决。。。脑仁疼。。。有小伙伴也碰到过这个问题么&#xff1f; 16/11/30 问题解决 1.服务器端API允许跨域访问(返回的数据添加允…

WebStrom Sass 编译配置 windows

第一步&#xff1a; 先安装Ruby下载 一路next 安装完成后打开开始菜单 打开后输入 gem install sass sass -v 出现版本号说明成功 第二部配置webstorm 在webstorm中settings中搜索file watchers工具&#xff0c;在此工具中添加一个scss的watcher 确定&#xff0c;打开一个scss…

非本地跳转之setjmp与longjmp

非本地跳转(unlocal jump)是与本地跳转相对应的一个概念。 本地跳转主要指的是类似于goto语句的一系列应用&#xff0c;当设置了标志之后&#xff0c;可以跳到所在函数内部的标号上。然而&#xff0c;本地跳转不能将控制权转移到所在程序的任意地点&#xff0c;不能跨越函数&am…

清华计算机自主招生试题,2017年清华大学自主招生笔试题

2017年清华大学自主招生笔试题2017高考结束后&#xff0c;全国各大高校自主招生面试开始了&#xff0c;以下是百分网小编搜索整理的关于2017年清华大学自主招生笔试题&#xff0c;供各位参考&#xff0c;希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!…

字符串替换

题目: 给定一个英文的字符串, 要求你将其中的元音删除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 当看到这个题目的时候, 第一个想起的就是re模块的正则表达式. 不过由于最近使用过字符串的replace方…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不错的布局窗格&#xff0c;如果您想一个接一个地连续地水平或垂直地布局子级&#xff0c;则可以。 它们彼此非常相似&#xff0c;因为它们都将子级布置成列&#xff08;在水平Flow / TilePane的情况下&#xff09;并按其宽度或行&#xff08;在垂直Flow…

EasyRMS录播管理服务器项目实战:windows上开机自启动NodeJS服务

本文转自EasyDarwin开源团队成员Penggy的博客&#xff1a;http://www.jianshu.com/p/ef840505ae06 近期在EasyDarwin开源团队开发一款基于EasyDarwin在录播服务器EasyRMS过程中,我采用node作为EasyRMS录播服务器录播管理服务器的开发平台,基于node开发关于设备管理,录像计划,录…

MIPS下CPU和RAM的数据流动情况详解

这是计算机硬件间的数据路径&#xff08;即数据流动的路径&#xff09;&#xff0c;下面将较详细分析此图&#xff1a; PC&#xff08;program counter&#xff0c; 程序计数器&#xff09;是一个用于记录当前计算机正在执行的指令的地址的寄存器&#xff08;register&#xff…

【计算机网络】网络层——IP协议

目录 一. 基本概念 二. 协议报文格式 三. 网段划分 1. 第一次划分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公网IP 2. DHCP协议 3. 路由器 4. NAT技术 内网穿透(NAT穿透) 五. 路由转发 路由表生成算法 结束语 一. 基本概念 IP指网络互连协议…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

托管豆 这篇文章是本教程第1部分的继续。 在“ com.mb”包中&#xff0c;您将需要创建以下类&#xff1a; package com.mb;import org.primefaces.context.RequestContext;import com.util.JSFMessageUtil;public class AbstractMB {private static final String KEEP_DIALOG…

佳能2900打印机与win10不兼容_佳能RF 1.4、RF 2增倍镜与RF 100500mm L IS USM并不完全兼容...

据佳能官方透露&#xff0c;佳能RF 1.4、RF 2增倍镜与RF 100-500mm F4.5-7.1 L IS USM镜头并不完全兼容。在安装使用两款增倍镜时&#xff0c;用户需将RF 100-500mm镜头变焦环的变焦位置移动到超过300mm的远摄区域。而在搭配增倍镜后&#xff0c;镜头变焦范围将限定在300-500mm…

县级的图书馆计算机管理员,图书馆管理员的岗位职责

图书馆管理员的岗位职责导语&#xff1a;在领导的命令下&#xff0c;紧紧围绕学校总体工作要求&#xff0c;牢固树立全心全意为教学及教科研第一线服务的思想&#xff0c;工作主动热情&#xff0c;努力做好管理育人的工作。图书馆管理员岗位职责&#xff1a;1、每学期认真制订切…

使用Java快速入门的Apache Thrift

Apache Thrift是由facebook创建的RPC框架&#xff0c;现在它是一个Apache项目。 Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入&#xff0c;以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也可以参考Thri…

Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》

一、Windows下&#xff08;两种方法&#xff09; 1. 安装Python EDP_free并安装pandas ① 如果你没有安装python2.7&#xff0c;可以直接选择安装Python EDP_free&#xff0c;然后再安装pandas等包就行 &#xff1a; Python EDP_free 网址&#xff1a; http://epdfree-7-3-2.…

Python基础类型

1. 列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 names [Alex,"Tenglan",Eric] 通过下标访问列表中的元素&#xff0c;下标从0开始计数 >>> names[0] Alex >>> nam…

angular点击按钮弹出页面_Win10提示“由于启动计算机时出现了页面文件配置问题”解决方法...

我们在使用Windows10系统的过程中&#xff0c;经常会遇到一些问题。近期有一个网友咨询装机之家小编&#xff0c;称自己Windows10系统开机之后&#xff0c;弹出系统属性对话框&#xff0c;提示“由于启动计算机时出现了页面文件配置问题”的问题&#xff0c;我们要如何解决呢&a…

计算机程序编程就业,计算机编程就业

为毕业生写计算机编程就业提供计算机编程就业范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文&#xff0c;包括论文选题、开题报告、文献综述、任务书、参考文献等&#xff0c;是优秀免费计算机编程就业网站。基于编程语言类课程教学方法的探讨位把考查学生的编程能力也…