首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Golang中绘制具有两个半径的圆

,可以使用图形库来实现。Golang中常用的图形库有github.com/fogleman/gggithub.com/llgcode/draw2d

  1. github.com/fogleman/gg是一个简单易用的2D绘图库,可以用于绘制各种图形,包括圆形。以下是使用该库绘制具有两个半径的圆的示例代码:
代码语言:go
复制
package main

import (
	"github.com/fogleman/gg"
	"math"
)

func main() {
	const (
		width  = 800
		height = 800
		radius1 = 200
		radius2 = 300
	)

	dc := gg.NewContext(width, height)
	dc.SetRGB(1, 1, 1) // 设置背景颜色为白色
	dc.Clear()

	dc.SetRGB(0, 0, 0) // 设置圆的颜色为黑色
	dc.DrawCircle(width/2, height/2, radius1)
	dc.Stroke()

	dc.SetRGB(1, 0, 0) // 设置圆的颜色为红色
	dc.DrawCircle(width/2, height/2, radius2)
	dc.Stroke()

	dc.SavePNG("circle.png") // 保存绘制结果为PNG图片
}

在上述代码中,我们使用gg.NewContext创建了一个800x800像素的绘图上下文,然后使用dc.SetRGB设置背景颜色为白色,接着使用dc.Clear清空绘图上下文。

接下来,我们使用dc.SetRGB设置圆的颜色,使用dc.DrawCircle绘制两个圆,分别具有半径为200和300,圆心位于绘图区域的中心点(width/2, height/2)

最后,使用dc.Stroke绘制圆的轮廓线,并使用dc.SavePNG保存绘制结果为PNG图片。

  1. github.com/llgcode/draw2d是一个功能强大的2D绘图库,支持更多的绘图操作。以下是使用该库绘制具有两个半径的圆的示例代码:
代码语言:go
复制
package main

import (
	"fmt"
	"github.com/llgcode/draw2d/draw2dimg"
	"image"
	"image/color"
	"math"
)

func main() {
	const (
		width  = 800
		height = 800
		radius1 = 200
		radius2 = 300
	)

	// 创建一个空白的绘图画布
	dest := image.NewRGBA(image.Rect(0, 0, width, height))

	// 创建一个绘图上下文
	gc := draw2dimg.NewGraphicContext(dest)

	// 设置背景颜色为白色
	gc.SetFillColor(color.White)
	gc.Clear()

	// 设置圆的颜色为黑色
	gc.SetStrokeColor(color.Black)
	gc.SetLineWidth(2)

	// 绘制半径为200的圆
	gc.BeginPath()
	gc.ArcTo(width/2, height/2, radius1, radius1, 0, 2*math.Pi)
	gc.Stroke()

	// 设置圆的颜色为红色
	gc.SetStrokeColor(color.Red)

	// 绘制半径为300的圆
	gc.BeginPath()
	gc.ArcTo(width/2, height/2, radius2, radius2, 0, 2*math.Pi)
	gc.Stroke()

	// 保存绘制结果为PNG图片
	draw2dimg.SaveToPngFile("circle.png", dest)
}

在上述代码中,我们首先使用image.NewRGBA创建了一个800x800像素的空白画布,然后使用draw2dimg.NewGraphicContext创建了一个绘图上下文。

接着,我们使用gc.SetFillColor设置背景颜色为白色,使用gc.Clear清空绘图上下文。

然后,我们使用gc.SetStrokeColor设置圆的颜色,使用gc.SetLineWidth设置线条宽度。

接下来,使用gc.BeginPath开始绘制路径,使用gc.ArcTo绘制两个圆,分别具有半径为200和300,圆心位于绘图区域的中心点(width/2, height/2)

最后,使用gc.Stroke绘制圆的轮廓线,并使用draw2dimg.SaveToPngFile保存绘制结果为PNG图片。

以上是在Golang中绘制具有两个半径的圆的示例代码,你可以根据需要选择适合的图形库来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

教你在Tableau中绘制蝌蚪图等带有空心圆的图表(多链接)

本文将通过分享多种方法,包括成功的与失败的尝试,来讲解如何在Tableau中创建蝌蚪图等带有空心圆的图表。...我之前遇到过这种情况并且多年来尝试过各种方法,所以我会分享自己一些的尝试和简单的解决方法,用于在Tableau中使用空白圆绘制蝌蚪图等图表。...建立一个蝌蚪图是简单直接的:它从哑铃图开始。但是一个单点只能显示当前时段而无法显示前一个时段的信息。在Tableau中,哑铃图很容易构建。它需要两个轴,一个轴作为点,另一个轴作为线来连接点。...那么为什么不创建一个有白色圆心的圆圈在PNG文件里呢?这样做的问题是,当Tableau对保存为具有透明背景的PNG文件中的自定义图形上的颜色编码时,它会改变白色中心的颜色,最后会出现彩色的圆点。...右键点击销售圈并选择“复制”,移动测量值到总和(销售圈)之上的列。这一操作会使测量值在列中替代总和(销售圈)。 你现在有四个测量值呈现在测量值卡片上,但我们只需要其中的两个。

8.5K50

Flash在DirectX中的绘制

这里使用的是之前我说过的OLE控件在Direct3D中的渲染方法, 自己不进行swf的解析, 这不现实....创建一个ShockwaveFlashObjects::IShockwaveFlash的对象 实现一个IOleClientSite来做为IShockwaveFlash的容器 绘制 通过OleDraw来把...GDI的像素数据绘制到DC上(IShockwaveFlash是一个IViewObject) 把DC的像素数据拷贝到D3D的Texture上....中间涉及像素格式的内存操作, 需要明白图像数据的内存格式. 半透明支持(可选): 如果不需要半透明支持的话, 其实可以直接OleDraw到Texture的DC上, 不用再多一次拷贝....但是有时候不得不用(像UI), 可以这参考Transparent Flash Control in plain C++, 用黑色背景和白色背景绘制两次, 比较两次结果 的Red通道计算出相应的Alpha

1.8K30
  • 任意半径局部直方图类算法在PC中快速实现的框架。

    在图像处理中,局部算法一般来说,在很大程度上会获得比全局算法更为好的效果,因为他考虑到了图像领域像素的信息,而很多局部算法可以借助于直方图获得加速。...一些局部算法只有在半径较大时才会获得很好的效果,因此,必须找到一种合适的加速计算局部直方图的方式。      ...在参考Median Filter in Constant Time.pdf一文附带的C的代码的基础上,本文提出了基于SSE加速的恒长任意半径局部直方图获取技术,可以大大加速算法的计算时间,特别是大半径时的提速更为明显...之后,对于一行中的第一个像素点,累加半径辐射范围内的列直方图,得到改点的局部直方图,对于行中的其他的像素,则类似于更新行直方图,先减去不在范围内那列的列直方图,然后加上移入范围内的列直方图。...经过测试,在我的I5的台式机中,1024*768图像在直方图更新上所需要的平均之间约为30ms,相比局部算法的核心就算部分时间(比如上述的求最大值),可能大部分耗时并不在这里。

    1K80

    知识分享之Golang——在Golang中管道(channel)的使用

    知识分享之Golang——在Golang中管道(channel)的使用 背景 知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习...开发环境 系统:windows10 语言:Golang golang版本:1.18 内容 本节我们分享在Golang中管道(channel)的使用,在使用管道时我们需要注意:先进先出原则。...以下是其相关代码和使用说明(代码中的注释) package main import "fmt" func main() { // 声明一个管道 var ch chan int...{ // c是接受对象,ok是本次读取的装填,当管道中没有值了或管道关闭了,这时就会返回false c, ok := <-ch if ok {...中的协程,使用起来我们就可以实现各种各样的高并发、队列机制等功能了。

    84720

    CAD常用基本操作

    ))有缘学习更多+谓ygd3076考证资料或关注桃报:奉献教育(店铺) 21 绘图中的平行四边形法则(利用绘制四边形绘制某些图形) A两条直线卡一条直线,绘制一个边直线后,通过平移获取另一边直线 B 在圆中绘制相应长度的弦...上下方向键命令 (圆心和半径的自动记录功能)有缘学习更多+谓ygd3076考证资料或关注桃报:奉献教育(店铺) b 圆特殊角度切线画法可采用先绘水平切线再绕圆心同时旋转圆和切线的方法 c 绘制圆与两圆相切且圆心在一直线上时...,可以选择相切相切之后在直线上选择垂足命令绘制(经验,无理论证明) d 如何绘制圆上具有一定角度的直线:先在圆心绘制相同角度的直线,再偏移半径值 3....,故两圆之间倒圆角结果为使用圆角弧与圆平滑地相连 I 三维倒角命令中,链式倒圆角,链指光滑连续相切的边 J 对两个三维几何体进行倒圆角操作时,应先进行并集操作,否则圆角会出现两几何体接触部分面积减少的情况...mline(ML) A 用于绘制多条平行线 B 对正(J)a 上:在光标下方绘制多线,在指定点处将会出现具有最大正偏移值的直线 b 无:将光标作为原点绘制多线 c 下:在光标上方绘制多线,在指定点处将出现具有最大负偏移值的直线

    5.5K50

    【CV 向】如何打造一个“数串串神器“

    斑点通常是图像中的亮点或暗点,其在图像中具有一定的特征和属性,例如颜色、大小、形状等。Blob Detection的目标是找到这些斑点并提取相关信息。...)是一种用于在图像中检测圆的经典算法。...参数空间:在霍夫圆变换中,使用三个参数来表示一个圆:圆心的x坐标、圆心的y坐标以及圆的半径r。通过设定合适的参数范围,创建一个二维的参数空间来表示所有可能的圆。...圆检测:在累加器数组中找到具有高累加值的位置,这些位置对应于可能的圆心和半径组合。这些位置表示了图像中存在的圆。 阈值和非最大抑制:根据设定的阈值,筛选出累加值高于阈值的圆。...对于相邻的圆,进行非最大抑制,保留具有最高累加值的圆,抑制其他圆。 绘制圆:根据筛选出的圆心和半径,在原始图像上绘制检测到的圆。

    34820

    Android自定义View之仿QQ未读消息拖拽效果

    效果图具有以下特性: 小圆点拖拽是有范围的 在拖拽范围进行拖拽后释放小圆点会进行回弹后回到初始位置 拖拽的时候,中心的圆会慢慢变小,拖拽的圆大小不变,中间连接的部分越来越长并且越来细,直至消失 如果超出定义的拖拽范围后进行释放会有爆炸的效果并且消失...3 分析 3.1 组成 先分析这个视图的组成: 中心的小圆:一个固定的圆 跟着手指移动的小圆:一个拖拽的圆 两个圆的连接部分 两条直线(两个圆的直径),用来连接两条贝塞尔曲线,形成封闭图形...:P1,P2,P3,P4,M,其中P1,P2,P3,P4是圆的切点,现在只知道两个圆的中心圆点O1和O2,那么怎么根据这两个点来求其余四个圆的切点呢?...} 18 return r; 19 20 21 } 最后在onDraw方法里,添加计算变化中心圆的半径即可: 1 //绘制方法 2 protected void onDraw...距离限制 下面增加拖拽距离限制,当拖拽距离大于给定的距离时,中心圆就会消失,逻辑很简单,也就是在onTouchEvent里的ACTION_MOVE,计算两个圆的拖拽距离,如果超出给定的拖拽距离,就不绘制贝塞尔曲线和中心固定圆

    1.9K20

    HTML5-Canvas之矩阵和多边形的绘制(2)

    矩形的绘制一共有两个口令,分别是 ctx.fillRect(x, y, width, height) 和 ctx.strokeRect(x, y, width, height) ,参数中的 x 和 y...PS/AI中的径向渐变只需要这两个点)。...但canvas在这里加入的“半径”参数还是有一定作用的,可以创造出比PS中径向渐变稍微复杂一些的效果。...⑴ 我们先来一个最简单最好理解的例子: 我们设置起始圆和结束圆中点相同,且起始圆半径为0,那么它的渐变线就是从两圆的中点开始到结束圆的边缘结束。...效果如下: ⑵ 我们在⑴的基础上将起始圆的半径设为20,代码和效果图如下: ⑶ 我们在⑵的基础上挪动起始圆的中点,不要让它跟结束圆的中点重叠,代码和效果图如下: 注意我们在定义RadialGradient

    1.5K20

    Json序列化在golang中的应用

    关于我 作者博客|文章首发 golang对json序列化和反序列化的操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生的写法上就会很难受。 不多BB,开始记录。...序列化库的选择 当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样的,因为性能的体现并不会很明显。...但是如果是在实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用json-iterator。...go自带json库 "encoding/json" 官当自带 json-iterator 号称最快的go json解析器。跟官方的写法兼容,我目前基本都使用这个。...GitHub上Star最高的工程师技能图谱 中国程序员最容易发错的单词 END 欢迎关注公众号 程序员工具集 致力于分享优秀的开源项目、学习资源 、常用工具 回复关键词“关注礼包”,送你一份最全的程序员技能图谱

    2.2K30

    蛛网图+绘制+动画实践

    在Android的时候自定义过蛛网图,花了半天时间。复刻到Flutter只用了不到20分钟 不得不说Flutter中的Canvas对安卓玩家还是非常友好的,越来越觉得Flutter非常有趣。...本文你将学到: 1.三角函数的使用 2.Flutter中如何用绘制文字 3.动画在绘图中的实际运用 4.Canvas绘图的相关相关方法 5.Flutter中一个组件的封装 ? ?...为了减少变量值,让尺寸具有很好的联动性(等比扩缩),小黑条的长宽将取决于最大半径mRadius 则:小黑条长:mRadius*0.08 小黑条宽:mRadius*0.05 所以r2=mRadius-mRadius...();//释放图层 } canvas.restore();//释放图层 } ---- 1.3.绘制内圈 同样尺寸和最外圆看齐,这里绘制有一丢丢复杂,你需要了解canvas和path的使用...canvas.restore(); } canvas.restore(); } ---- 1.3.绘制文字 Flutter中绘制文字可有点略坑,我这里简单的封了一个drawText

    1.4K10

    Google Earth Engine ——边界线识别!

    Finding Circles, Revisited Earth Engine by Example 在地球引擎代码编辑器示例中,有一个通过内核卷积进行圆查找的示例。...本文将演示另一种圆检测方法,它具有更大的灵活性,称为圆霍夫变换(CHT)。 Circle Hough 变换应用于科罗拉多州南部中心枢轴灌溉农场的边缘检测图像的示例。彩色圆点代表检测到的圆心。...CHT 通常的配方是: 使用高斯卷积平滑输入 使用 Canny 边缘检测器执行边缘检测 迭代图像中的像素,为每个输入像素绘制一个给定半径的圆到一个累加器图像中。...找出累加器中的最高值;这些将对应于输入中任何圆的中心。 要了解 CHT 的工作原理,请考虑下图,其中输入圆(左)中的 4 个像素被描绘为半径为0.6*r(中心)和半径为1.0*r(右)的圆。...CHT 配方中的前两个步骤在 Earth Engine 中很简单,但是在那里迭代图像中的每个像素是不切实际的,因此我们无法以传统方式跟踪和累积圆圈。

    16410

    蛛网图+绘制+动画实践

    在Android的时候自定义过蛛网图,花了半天时间。复刻到Flutter只用了不到20分钟 不得不说Flutter中的Canvas对安卓玩家还是非常友好的,越来越觉得Flutter非常有趣。...本文你将学到: 1.三角函数的使用 2.Flutter中如何用绘制文字 3.动画在绘图中的实际运用 4.Canvas绘图的相关相关方法 5.Flutter中一个组件的封装 ? ?...为了减少变量值,让尺寸具有很好的联动性(等比扩缩),小黑条的长宽将取决于最大半径mRadius 则:小黑条长:mRadius*0.08 小黑条宽:mRadius*0.05 所以r2=mRadius-mRadius...();//释放图层 } canvas.restore();//释放图层 } ---- 1.3.绘制内圈 同样尺寸和最外圆看齐,这里绘制有一丢丢复杂,你需要了解canvas和path的使用...canvas.restore(); } canvas.restore(); } ---- 1.3.绘制文字 Flutter中绘制文字可有点略坑,我这里简单的封了一个drawText

    1.2K40

    【CV 向】如何打造一个“数串串神器“

    斑点通常是图像中的亮点或暗点,其在图像中具有一定的特征和属性,例如颜色、大小、形状等。Blob Detection的目标是找到这些斑点并提取相关信息。...)是一种用于在图像中检测圆的经典算法。...参数空间:在霍夫圆变换中,使用三个参数来表示一个圆:圆心的x坐标、圆心的y坐标以及圆的半径r。通过设定合适的参数范围,创建一个二维的参数空间来表示所有可能的圆。...圆检测:在累加器数组中找到具有高累加值的位置,这些位置对应于可能的圆心和半径组合。这些位置表示了图像中存在的圆。阈值和非最大抑制:根据设定的阈值,筛选出累加值高于阈值的圆。...对于相邻的圆,进行非最大抑制,保留具有最高累加值的圆,抑制其他圆。绘制圆:根据筛选出的圆心和半径,在原始图像上绘制检测到的圆。

    73310

    解决canvas在高清屏中绘制模糊的问题

    一、问题分析 使用 canvas 绘制图片或者是文字在 Retina 屏中会非常模糊。如图: [img] 因为 canvas 不是矢量图,而是像图片一样是位图模式的。...也就是说二倍屏,浏览器就会以 2 个像素点的宽度来渲染一个像素,该 canvas 在 Retina 屏幕下相当于占据了2倍的空间,相当于图片被放大了一倍,因此绘制出来的图片文字等会变模糊。...类似的,在 canvas context 中也存在一个 backingStorePixelRatio 的属性,该属性的值决定了浏览器在渲染 canvas 之前会用几个像素来来存储画布信息。...", 50, 50); 这样就可以解决 canvas 在高清屏中绘制模糊的问题。...完整的demo:https://www.html.cn/demo/canvas_retina/index.html 参考文章:《解决 canvas 在高清屏中绘制模糊的问题》

    6.6K10

    Canvas系列(20):画布中画满圆

    今天的内容比较简单,我们学习如何在画布中画满圆。要求圆与圆之间不能相交,最终效果如下。 HTML结构 首先我们先展示我们基础的HTML结构。...500个半径是10px的小圆,效果如下: 绘制500个不相交的圆 上面绘制了500个圆,他们可能是相交的,现在我们绘制500个不相交的圆。...,新圆并没有加入到 circles 数组中,所以我们只需要判断新圆是否与数组中的圆相交并判断是否与边界相交就可以了。...小优化 上面我们绘制圆的时候,由于第一个绘制的圆只受边界相交的限制,假设第一个圆的坐标在靠近中心的位置,就有很大概率绘制一个最大的圆,所以当你多次刷新网页的时候就会发现,通常有一个很大的圆,这样不是那么美观...我们现在让绘制的最大半径修改成 圆最大半径 和 最小半径 + 1 之间的一个随机值,这样可以避免每次都有一个极大圆存在。

    6700

    圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化

    ProgressiveLayout 连续放置圆,使每个圆与先前放置的两个圆在外部相切。该算法是确定性的,尽管可以通过改变输入圆圈的顺序产生不同的布局。它非常高效,因此适用于处理大型数据集。...Layout(areass) 布局作为具有圆心坐标和半径的数据框返回。 head( layout ) 我们将其转换为圆形顶点的数据集,用 ggplot 显示。...结果数据集有一个整数 id 字段,它对应于传递给 的原始数据中圆圈的位置。 head(dtg) 现在我们可以绘制布局了。...请注意,在我们的初始布局中,我们将圆的大小表示为面积,因此我们需要在调用Vertices 函数时指定 ,否则它假定大小是半径。...cirtt.t dgfal <- circes(es$aut) plot(dta = da,as(x, y, grp=d, fl=ste)) + gen(coor) 请注意,在初始布局中重叠的固定圆在最终布局中仍然重叠

    4K30
    领券