我想这是一个简单的问题,但是我现在的代码得到了一些奇怪的结果,我没有数学背景来完全理解为什么.我的目标很简单,正如标题中所述:我只想找到距离中心点一定距离和角度的点.
我目前的代码:
Point centerPoint = new Point ( 0, 0 );
Point result = new Point ( 0, 0 );
double angle = 0.5; //between 0 and 2 * PI, angle is in radians
int distance = 1000;
result.Y = centerPoint.Y + (int)Math.Round( distance * Math.Sin( angle ) );
result.X = centerPoint.X + (int)Math.Round( distance * Math.Cos( angle ) );
Run Code Online (Sandbox Code Playgroud)
一般来说,这似乎相当合理,但我在各个点都遇到问题,最明显的是当角度对应于负x轴和y轴的点时.显然我做错了什么 - 想一想是什么?
更新:这是我的错误,这段代码工作正常 - 少数不起作用的异常值实际上是由于如何计算1.5PI的角度的错误.我以为我已经检查得那么好,但显然没有.感谢大家的时间,希望上面的工作代码对其他人有用.
假设我们有一个100x100坐标系,如下所示.0,0是它的左上角,50,50是它的中心点,100,100是它的右下角等.
现在我们需要从中心向外画一条线.我们知道线的角度,但需要计算其终点的坐标.您认为最好的方法是什么?
例如,如果线的角度是45度,则其终点坐标将大致为75,15.
TL; DR:将矩形图像裁剪成圆圈的最有效方法是什么?
说明/背景:
我正在研究R中的一些代码,它会将Spotify艺术家图像显示为圆圈而不是默认的矩形/正方形.我找不到在R中裁剪图像的任何包或命令,特别是圆圈,所以我编写了自己的函数circ
,它读取三维(或四维)RGB(A)数组并将它们裁剪成一个圆圈使用圆的参数方程来确定每个唯一y的x值.这是我的伪代码:
Given an RGB(A) array:
Find the center of the image, radius = min(x coord, y coord)
Pre-crop the image to a square of dimensions 2r x 2r
For every unique y value:
Determine the x coordinates on the circle
Make pixels outside of the circle transparent
Return the cropped image as an RGBA array
Run Code Online (Sandbox Code Playgroud)
这个功能比我之前的功能有了很大的改进,它检查了每个像素的位置,看它是在圆圈的内部还是外部,但我仍然觉得它可以进一步加速.
有没有办法可以检查一半的y值而不是所有的y值,然后镜像在圆圈上?我可以使用实际的裁剪功能吗?任何和所有的帮助非常感谢!
编辑添加一些复制粘贴运行代码(感谢@lukeA):
我的原始裁剪方法:
circ = function(a){
# First part of the function finds the radius of …
Run Code Online (Sandbox Code Playgroud) 我正在编写代码来查找圆周上的点.我有圆的中心点和半径,我需要在它周围画一个圆圈.这将有助于我定义边界.请帮助我找到圆周上找到这些点的公式.
我创建了一个圆圈:
<div class='ring'></div>
.ring {
border-radius: 50%;
border: 2px solid;
}
Run Code Online (Sandbox Code Playgroud)
我需要在弧上绘制点(如A点)和圆内点(如B点),我该如何明智地做到?这意味着我可以选择在圆圈上的任何地方理解和添加点数.
首先,请注意,这个问题不是这些问题的重复:1st、2nd和3rd。
我正在使用 delphi 和 openCV,但我正在寻找一种算法,一种与语言无关的解决方案。
为了进行精确的图像分析,我需要检查圆形区域中像素强度的变化。所以我在不断增长的圆的圆周上读取像素值。为了能够做到这一点,我当然需要知道像素的坐标。
我找到的最好的解决方案是y:= Round(centerY + radius * sin(angle)), x:= Round(centerX + radius * cos(angle))
,因为只用 360 度计数是不够的,当圆的半径大于大约 60 像素时,角度是这样计算的angle:= angle + (360 / (2 * 3.14 * currentRadius))
- > 我扫描了从 0 到 360 的每个值,而该值正在增加 360/圆周长的一小部分(以像素为单位)。但是这种方法不是很精确。圆越大,角度的分数需要越小,精度会受到 Pi 的不准确以及四舍五入的影响。
如果我使用上述方法,并尝试使用以下代码绘制计数像素:
centerX:= 1700;
centerY:= 1200;
maxRadius:= 500;
for currentRadius:= 80 to maxRadius do
begin
angle:= 0;
while angle < 360 do
begin
xI:= Round(centerX + currentRadius * cos(angle));
yI:= Round(centerY …
Run Code Online (Sandbox Code Playgroud) 是否可以创建如下图所示的两个按钮?看起来你应该使用UIButton或UIImageView但是如果我点击区域1,它仍然可以点击按钮1.当我点击区域1时,按钮2应该被触发!
我有一个列表视图,左侧是"Hero"图标.当我单击一个列表项时,它会加载下一个屏幕,其中包含文章文本和Hero图像(可以很好地/自动地动画到第二个屏幕上的正确位置).
我原本以为这是"艰难"的部分,但我现在正试图将弯曲的形状作为第二个屏幕的顶部背景.我想把它变成一个绘制的矢量形状,而不是位图,甚至让它滴到/弹回到页面上,但此刻......
我只想弄清楚如何:
我正在使用drawRect方法在UIView中绘制一个圆.我使用以下代码绘制它.
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddArc(context, 105, 105, 55, [self convertDegreeToRadian:15.0], [self convertDegreeToRadian:345.0], 0);
CGColorRef black = [[UIColor blackColor] CGColor];
CGContextSetStrokeColorWithColor(context, black);
CGContextStrokePath(context);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个从15度到345度的曲线.因此,这条曲线从一个点到另一个点.我需要得到两条边的点.我怎么得到它?
使用d3.js-我想创建这种时钟接口。
理想情况下,是否可以将12时钟数据驱动方式合并到此饼图中。
https://jsfiddle.net/qkHK6/2191/
var w = 400;
var h = 400;
var r = h / 2;
var color = d3.scale.category20c();
var data = [{
"label": "Category B",
"value": 70
}, {
"label": "Category A",
"value": 30
}];
var vis = d3.select('#chart').append("svg:svg").data([data]).attr("width", w).attr("height", h).append("svg:g").attr("transform", "translate(" + r + "," + r + ")");
var pie = d3.layout.pie().value(function(d) {
return d.value;
});
// declare an arc generator function
var arc = d3.svg.arc().outerRadius(r);
// select paths, use arc generator to draw
var …
Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制一个内部有一条线的椭圆Bitmap
,类似于这张图:
我的应用可以加载位图图片,可以是任何尺寸.我只需要画一个椭圆线,里面有一条线.
我知道如何绘制椭圆,但我的问题是它内部的线:
Bmp.Canvas.Ellipse(0, 0, Bmp.Width, Bmp.Height);
Bmp.Canvas.MoveTo(?, ?);// Here is my problem
Bmp.Canvas.LineTo(?, ?);// here too
Run Code Online (Sandbox Code Playgroud)
我试试这个:
Bmp.Canvas.MoveTo(0, 0);
Bmp.Canvas.LineTo(Bmp.Width, Bmp.Height);
Run Code Online (Sandbox Code Playgroud)
但是这将从图片的左上角到右下角画一条线.
我正在尝试使用 javascript 制作太阳系,我正在使用可汗学院制作它,但我知道如何让它们围绕太阳绕圈移动我一直在网上浏览几个小时,但我不能找不到任何东西。这是我的项目,以便您可以看到我做了什么以及您可以在其中做什么
https://www.khanacademy.org/computer-programming/solar-system/6120244512161792