有没有办法在javascript中绘制x,y坐标,使它们落入一个圆而不是一个正方形?
例如,如果我有以下代码:
circleRadius = 100;
context.drawImage(img_elem, dx, dy, dw, dh);
Run Code Online (Sandbox Code Playgroud)
我需要弄清楚x,y值的组合会落在100像素的圆圈内.
谢谢!
背景:
我正在使用运输路线,谷歌提供足够远的路线点来创造"形状".这些是您在Google地图中看到的巴士/火车路线.
我的要求:
谷歌的积分远远不足以创造直线.但是我想要一个点,比方说,5米.
问题:
所以,说我有两点[lat,long]:
[-33.8824219918503,151.206686052582]和[-33.8815434600467,151.206556440037]
鉴于这两点,我可以计算它们之间的距离.说为了争论它是1公里.
所以我们可以想象这两点之间的假想直线.
如何为每个(例如5米)生成该虚线的坐标?
我坚持为所有分辨率获取图像的x&y坐标.
我创建了我的图像视图,原始大小为1500 x 1119的图像.当我触摸图像时,我可以通过onTouch()获得坐标.如果在所有设备中更改了坐标,我的问题.我在不同的欺骗中得到不同的x和y值.我无法为所有分辨率获得相同的x和y值.我该如何解决这个问题?
更新:这个问题正在寻求如何获得任何给定坐标的一组邻居的指导.
我创建了一个包含坐标的二维数组,
int[][] coordinates= { { -1, -1 }, { -1, 0 }, { -1, +1 },
{ 0, -1 }, { 0, +1 }, { +1, -1 }, { +1, 0 }, { +1, -1 } };
Run Code Online (Sandbox Code Playgroud)
如您所知,这些是坐标(0,0)的邻居.
现在我尝试实现一个接受两个参数的方法(int positionX, int positionY),并使用输入参数值coordiante(x,y)作为起始坐标并找到该坐标的所有邻居.
我在考虑这样的事情:
int getNearCoordinates(int positionX, int positionY) {
for (int[] coordinate: coordinates) {
//I am not sure what to do after this
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使用一个循环从我创建的2d数组获取单个坐标,我被困在这里.我如何找到一种方法来正确找到positionX和positionY的邻居?
什么是邻居?
我有一个基本代表一个屏幕的坐标系.
我有任意数量的职位.例如:
population = [
{x: 100.44, 200.54},
{x: 123.45, 678.9},
{x: 1300.23, 435.81},
{x: 462.23, 468.37},
{x: 956.58, 385.38},
];
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种找到最无人居住点的算法.
白色迷你圆圈代表人口和红色Xs标记点,对我来说似乎非常无人居住:
我的目标是运行一个动画,随机将所有这些白色迷你圆圈移动到随机方向,一旦圆圈离开屏幕,它就会被传送到最无人居住的地点,这样大空空间的数量就会减少.
我试图通过计算从每个整数坐标到每个圆的距离之和,然后选择具有最高距离和的坐标来实现这一点.仅此一点似乎已经非常耗费CPU,但我注意到这个算法会使圆圈传送到我的坐标系的边界.所以我还添加了从每个整数坐标到每个边界整数坐标的距离之和.那时,脚本基本上冻结了.所以这绝对不是正确的方法.
我的想法已经不多了.我想我不需要一个完美的算法,而是一个在精度和性能之间保持平衡的算法.最后,我希望能够在1920x1080画布上每秒多次运行该算法,其中大约有80个这样的小环.理想情况下,算法会有一个参数来调整精度,从而调整它使用的CPU时间.
这是我上面提到的方法.我注释掉导致脚本冻结的行:
let circles = [
{x: 60.44, y: 190.54},
{x: 103.45, y: 18.9},
{x: 390.23, y: 135.81},
{x: 302.23, y: 28.37},
{x: 56.58, y: 85.38},
]
function getDistance(p1, p2) {
return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2)
}
function drawCircle(ctx,x,y,r,c) {
ctx.beginPath()
ctx.arc(x, y, r, 0, 2 * Math.PI, …Run Code Online (Sandbox Code Playgroud)在编程问题之前,我认为我需要给出一些我正在做的事情的背景知识,以便于理解我的问题:
我在向受试者主体显示一些图案的同时记录眼球运动.通过实验,我后来展示了这些模式的一些对称变换.

我得到的是固定坐标和持续时间列表:
{{fix1X,fix1Y,fix1Dn},{fix2X,fix2Y,fix2Dn} ... {fixNX,fixNY,fixNDn}}
地点:
- fix1X是第一次固定的X坐标.
- fix1Y是第一次固定的Y坐标.
- fix1D是固定的持续时间(以毫秒为单位)
请考虑 :
FrameWidth = 31.36;
scrHeightCM = 30;
scrWidthCM = 40;
FrameXYs = {{4.32, 3.23}, {35.68, 26.75}}; (* {{Xmin,Ymin},{Xmax,Ymax}} *)
Run Code Online (Sandbox Code Playgroud)
以下是1个显示器的固定(屏幕上3s刺激演示期间的主题固定)
fix ={{20.14, 15.22, 774.}, {20.26, 15.37, 518.}, {25.65, 16.22, 200.},
{28.15, 11.06, 176.}, {25.25, 13.38, 154.}, {24.78, 15.74, 161.},
{24.23, 16.58, 121.}, {20.06, 13.22, 124.}, {24.91, 15.8, 273.},
{24.32, 12.83, 119.}, {20.06, 12.14, 366.}, {25.64, 18.22, 236.},
{24.37, 19.2, 177.}, {21.02, 16.4, 217.}, …Run Code Online (Sandbox Code Playgroud) 我怎么能转换这个:
26.72773551940918
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
22°12'42"N
Run Code Online (Sandbox Code Playgroud)
这里的诀窍是坐标实际上是Latitude和Longitude,我只需要正确格式化它们.
我有一个XML文件中的经度和纬度列表.我可以将lat和lon打印为字符串,但是当我将字符串转换为double时,我得到0.
这是我的代码:
NSString *latstring = [[NSString alloc] initWithString:theList.lat] ;
NSString *lonstring = [[NSString alloc] initWithString:theList.lon];
NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);
double latdouble = [latstring doubleValue];
double londouble = [lonstring doubleValue];
NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);
Run Code Online (Sandbox Code Playgroud)
当我记录'latstring'和'lonstring'时,我得到了正确的坐标,但是当我记录'latdouble'和'londouble'时,我得到0.
我需要lat和lon值为double,因此我可以在mapview中使用它们,因为它不允许我使用字符串作为坐标.
对此可能有一个非常简单的解释,但我对objective-c相当新,似乎无法找到解决方案.
任何帮助深表感谢.
为了管理内容可编辑UIWebView中的自动滚动,我需要获得正确的插入符Y垂直坐标.
我使用javascript确定了两种方法.
第一个使用getClientRects javascript函数:
CGRect caretRect = [self.webView stringByEvaluatingJavaScriptFromString: @"
var sel = document.getSelection();
var range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
var r =range.getClientRects()[0];
return '{{'+r.left+','+r.top+'},{'+r.width+','+r.height+'}}';"];
int caretY = caretRect.origin.y;
Run Code Online (Sandbox Code Playgroud)
这样,插入符号一直闪烁,一个问题得到正确的垂直位置,有一个问题:当用户键入返回键时,下一行为空,在键入字符键之前,caretY等于零.这样的方法就无法使用了.
第二个插入一个tmp span,然后将其删除:
int caretY = [[self.webView stringByEvaluatingJavaScriptFromString: @"
var sel = window.getSelection();
sel.collapseToStart();
var range = sel.getRangeAt(0);
var span = document.createElement(\"span\");
range.insertNode(span);
var topPosition = span.offsetTop;
span.parentNode.removeChild(span);
topPosition;"] intValue];
Run Code Online (Sandbox Code Playgroud)
这在任何情况下都给出了正确的照顾.但插入符号停止闪烁,这在屏幕上看起来非常无益.
有没有人知道可以做出以下的任何方法(或这些方法的改编):
- get the correct caret Y in any situation
- keep the caret blinking in any situation
Run Code Online (Sandbox Code Playgroud)
谢谢