我自己的数学问题。我知道如何检查一个点是否位于圆圈内:(x-x1)^2 + (y-y1)^2 <= r^2
但我的问题有点不同。我有一定比例的圆圈:圆圈不满,它只是它的一部分(它就像一个进步馅饼)。
我需要查看一个点是否在该百分比内。
如何做到这一点,公式是什么?
这是我的代码:
#include <iostream>
#include <fstream>
#include <cmath>
#define pi 3.14159265
using namespace std;
ifstream fin("sol.in");
ofstream fout("sol.out");
int x,y,p,t,i;
double phi;
int main()
{
fin>>t;
for(i=1;i<=t;i++)
{
fin>>p>>x>>y;
phi=atan2(50-y,50-x);
if(phi<0)phi+=2*pi;
if(phi<2*pi*p)cout<<"1"<<endl;
else cout<<"0"<<endl;
}
return 0;
}
我的输入文件:
5 0 55 55 12 55 55 13 55 55 99 99 99 87 20 40
答案 0 :(得分:0)
将角度计算为
var app = app || {};
(function() {
'use strict';
//views linitalize
var views = app.view = app.view || {};
views.Application = Backbone.View.extend({
initialize: function() {
this.$content = this.$('#container');
//this.$loading = this.$('#loading');
},
setContent: function(view, target) {
var content = this.content;
var subUrl = this.target;
if (content) content.remove();
//if (content || target) content.remove()target.remove();
content = this.content = view;
subUrl = this.target = target;
var templateName = subUrl;
var tmpl_dir = '../assets/static';
var tmpl_url = tmpl_dir + '/' + templateName + '.html';
var tmpl_string = '';
$.ajax({
url: tmpl_url,
method: 'GET',
async: false,
dataType : 'html',
success: function (data) {
tmpl_string = data;
}
});
console.log(tmpl_string);
this.$content.html(content.render(tmpl_string).el);
},
showSpinner: function() {
this.$loading.show();
},
hideSpinner: function() {
this.$loading.hide();
}
});
views.Home = Backbone.View.extend({
render: function(templateName) {
var template = _.template(templateName);
this.$el.html(template);
return this;
}
});
并比较
phi = atan2(y-y1, x-x1);
if(phi<0) phi += 2*Pi;
答案 1 :(得分:0)
在极坐标系中工作。
在这样的系统中,M
点由(r, t)
对表示,其中r
是从O
原点到M
的距离, t
是x轴和(OM)
线之间的逆时针角度。
此外,r
严格为正,而t
位于[0, 2*Pi[
(我选择的代表中),并且是弧度。
从笛卡尔坐标系中,极坐标如下:
r = sqrt(x ^ 2 + y ^ 2)
t = atan2(-y,-x)+ Pi
(更多关于wikipedia)
我假设你是在三角方向上从x轴计算你的圆圈百分比,所以你会有这样的事情:
首先,如果r
大于您的圆的半径,那么M
就在圆圈之外。
否则,假设你有p
个圆圈,那么0 <= p <= 1
。在弧度中,这等于2*Pi*p
。
由于t
和2*Pi*p
都在[0, 2*Pi[
范围内,您可以直接比较它们:如果t > 2*Pi*p
,那么M
就在圈外
现在,对于公式,如果您有(x, y)
点和(R, p)
半径R
半径和p
百分比,则必要且充分条件为:< / p>
(x, y) in (R, p) <=> sqrt(x^2 + y^2) <= R AND atan2(-y, -x) + Pi <= 2*Pi*p