lcd240128的如何画出一个圆的形状
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lcd240128的如何画出一个圆的形状相关的知识,希望对你有一定的参考价值。
参考技术A 在 LCD 上 直接用像素点画圆1 先初始化LCD
在LCD上直接操作像素点,没多少效率,实际测试中对字符界面也是可以的,直接上代码:
2 怎么计算像素点
根据方程 :(x-a)(x-a) + (y-b) (y-b) = r^2可以写出最简单的算法
画出第一个圆,仔细看这个圆,在最左边有很多像素点“丢失”,这是因为从最左边开始,在x+1后,y增幅较大,相邻的两个像素点纵坐标差值较大;而在靠近最高点处,Y的增幅又变小,导致看起来两边稀,上面密的效果。
.a…
…
…
a…
于是想到了对y轴进行像素补偿,在 y_now - y_last > 1 的时候,补偿y,防止y跳变
补偿之后的圆长这个样子,
.a…
.a…
.a…
a…
看着好像还是有点僵硬,干脆补偿的时候从中间截断,前半部分用上一个像素点的x坐标,后半段才用下一个点的x坐标
像这样
.a… 一半用新的横坐标
.a…
a…一半用旧的横坐标
a…
把三个圆的效果和微软自带的的画图工具画的圆作对比:
优点:和微软的比起来,左右的像素点看起来更平滑
缺点:上下的像素点还可以待进一步优化
3 代码如下:
有空了我会把图贴上
文章知识点与官方知识档案匹配
C技能树首页概览
108396 人正在系统学习中
打开CSDN APP,看更多技术内容
【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆...
0. 引言TFT-LCD屏幕的画直线、画斜线、画矩形、画圆等算法都是基于打点函数的,所以此程序可以移植到任何屏幕的基本驱动程序之上。1. 打点函数 —— 底层函数(移植需修改)打点函数其实就是屏幕显存(液晶控制器显存)中某一个点的颜色...
画圆方法小结_i_water的博客
1、在LCD屏幕上用颜色画一个空心圆 #include <math.h>#define pi 3.1415926#define N 360void draw_Circle(intm,intn,intr,intcolor) inti;intx,y;for(i=0;i<N;i++) x=m+r*cos(2.0*pi*i/N);y= n+r*sin(2.0...
LCD 画线方法及C语言实现
LCD 画线方法及C语言实现,点阵LCD画直线的多种方法
计算机图形学---基于整个屏幕像素点的直接画圆法
基于整个屏幕像素点的直接画圆法 用来记录一个基于整个屏幕像素点的直接画圆法! 算法简介 设直线的两个端点是A(Xa,Ya)和B(Xb,Yb),则我们仅需考虑x=Xa,x=Xb,y=Ya,y=Yb四条线围成的矩形区域内的每一个像素点的情况,设P(X0,Y0);是该区域的任意像素点,则可以通过判断P到直线AB之间的距离来决定P点是否被点亮。 点到直线的距离公式 d=∣Ax0+By0+CA2+b2∣ ...
继续访问
我的5110画图库--Nokia 5110液晶屏实现画点、画线、画矩形、画圆...
#define LCD_Y 48 //液晶屏纵坐标高度 #define LCD_COLUMN LCD_Y / 8 //液晶屏行高度 #define LCD_AREA LCD_X * LCD_Y //液晶屏面积 #define LCD_AREA_BYTE LCD_COLUMN * LCD_ROW //液晶屏字节容量 ...
(学习笔记)stm32f4在液晶上画圆及填充圆的几种方法
先说下画圆,根据圆的对称性将圆8等分,求出其中一份,其他可以通过坐标变换得到。得到过程可以百度中点画圆法。 程序: void LCD_Draw_Circle(uint16_t Xpos,uint16_t Ypos,uint16_t Radius) int16_t mx=Xpos,my=Ypos,x=0,y=Radius; int16_t d=1-Radius; while(y>x)
继续访问
LCD画线画圆
LCD画线画圆
mpy lcd 绘制圆
1.实心 def drawCirc_fill(tft,x,y,r,pen): ox =r oy =0 err = -r while ox>=oy: last_oy = oy err +=oy oy+=1 err+=oy tft.hline(x-ox,y+last_oy,ox*2+1,pen) ##3 if last_oy != 0: tft.hli
继续访问
lcd画圆算法
#include "math.h" #define PI 3.14159265 #define LCDWIDTH 800 #define LCDHEIGHT 480 //x,y:坐标 //color:颜色 //angle:角度 //radius:半径 void LCD_DrawPoint_Rotate(u16 x,u16 y,u16 color, int angle,int radius) ...
继续访问
LCD编程显示像素点
一 LCD屏幕 本次学习使用的LCD屏是一块 800*480 分辨率的全彩屏幕。 分辨率的意思是:每行有800个像素点,一共有480行。 全彩的意思是:像素点显示的颜色是由RGB红绿蓝三种单颜色组成,其次还有阿尔法粒子透明度A。也就是ARGB。 LCD显示屏在工作中需要显卡,显卡中要有显存。而本次学习的开发板没有独立显卡,所以需要分配虚拟显存。而每个像素点在显存中占据4个字节的空间,也就是ARGB...
继续访问
【LCD画圆】算法系列之十一:圆生成算法
算法系列之十一:圆生成算法 原文:http://blog.csdn.net/orbit/article/details/7253285 分类: 算法系列 2012-02-12 21:45 6828人阅读 评论(21) 收藏 举报 输入您的搜索字词 提交搜索表单 在平面解析几何中,圆的方程可以描述为(x – x...
继续访问
热门推荐 lcd彩屏画点画线和画圆 嵌入式开发
在lcd显示屏上的指定点画出直线,点,圆 本文源于 海之遥的博客 http://blog.sina.com.cn/atpx1989 亲测可行,觉得很有意义,拿过来以备以后用 //-----------画点函数。参数:坐标,颜色------------------- void draw_point(int x, int y, int clor) fb[
继续访问
STM32学习笔记-LCD画直线,画圆
STM32学习笔记-LCD画直线,画圆 1.画直线 如果在两点(a,b)(c,d)之间画直线,首先考虑c>a,d>b,且k<1的情况,其他情况根据对称关系就能推导出来了。 为了使问题简单化,先将这两点进行平移,将(a,b)平移到原点,那么(c,d)变换后的坐标就是(e,f),其中e=c-a,f=d-b,斜率k=f/e; 假设在LCD上我们取的第i个像素点的坐标是(i,j),那么第...
继续访问
C语言 程序 画圆、画圆和y=x^2
绘制圆 在屏幕上用“*”画一个空心的圆 *问题分析与算法设计 打印圆可利用图形的左右对称性。根据圆的方程: R*R=X*X+Y*Y 可以算出圆上每一点行和列的对应关系。 程序思想和之前的两个程序一样。整个圆向右平移R个单位,因为长宽比不一样所以还要有个系数,下面是我写的程序 #include #include #define R 10 #defi
继续访问
图形学 画圆算法(Bresenham + 中点)
圆的特性 我们的圆中,具有对称的特性,在xy坐标轴中具有八对称的特性。 我们只需要画出一个点 按照八对称性,我们就能获得八个点,所以我们只需要画一个八分之一圆就好了。我们就选择最利于我们思考的第一象限0~Math.sqrt(1)部分,就是上边橘点位置的区域。 中点画圆 我们通过中点到圆的距离(通过符号判定),我们就能选择相应的点。我们每次的选择中点时,增量都是有规律的。 我们通过对直...
继续访问
S3C2440裸机------LCD_画点线圆
目录 1.画点 2.画线、圆 1.画点 我们首先实现画点的函数, #include "lcd.h" /* 实现画点 */ /* 获得LCD参数 */ static unsigned int fb_base; static int xres, yres, bpp; void fb_get_lcd_params(void) get_lcd_params(&fb_base, &xres, &yres, &bpp); /* rgb: 0x00RRGGB
继续访问
记录STM32F1控制LCD绘制圆形
注:代码参考与正点原子教程 //绘制一个圆,传入圆心坐标和半径 void gui_dispCircle(uint32_t x0,uint32_t y0,uint32_t r) int a,b; int di; a=0; b=r;
LCD编程_画点线圆
上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点、画线、画圆。画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作。 先抛出这样的一个问题,已知: (x,y)的坐标; bpp; xres; yres; 那么,如何在framebuffer中获得像素的地址呢? (x,y)像素的起始地址 = fb_base +(xres * bpp /8...
继续访问
基于像素点的图形显示算法(Bresenham圆形个人理解)
目录 目的 几何原理 代码优化 参考区域选取 计算量 填充方式 程序源码 目的 本实验基于STM32F103RC+TFTLCD屏,旨在于在LCD屏上显示一个实心圆形,然而众所周知,对于屏幕而言,我们只能操作各个像素点,因此,选择出最接近标准圆形的像素点就成了本次实验的主要目的,最终得到的圆形大概应该长这样 看起来很不规则,但是这里只是半径为5个像素点的圆形,因此放大来...
继续访问
最新发布 TFT-LCD显示直线、矩形、圆形
usR、usG、usB变量为16位,但首先读取出的RED数据占5位,且在高字节,GREEN数据占6位,同样在高字节,BLUE数据占5位,在高字节,所以组合时要通过移位,将RED数据放在usColor的高5位,GREEN数据占中间的6位,剩下的5位放BLUE数据,这样就组合成了RGB565的数据格式。如果是填充矩形,则调用填充颜色函数按照矩形的宽和高填充颜色就行,如果是不填充矩形,则画四条直线。之前显示ASCII字符、中文和图片都是使用的取模软件,这次直接用代码驱动显示直线、矩形和圆形。
继续访问
用C语言字符画圆
用C语言画圆,这是一是算法的问题,我们知道,程序是由数据结构加算法组成的,研究这类东西,其实也是研究算法的问题,是比较有意思的。圆心为0的时候,圆的公式公式:那我们要如何写代码呢?示例代...
继续访问
【opencv学习笔记.1】操作像素画圆
任何图像处理算法,都是从操作每个像素开始的,刚接触Opencv,写的第一个小程序:分别用动态地址和指针操作像素画圆。 用的是VS2015搭opencv3.0 一.首先是用动态地址计算来操作像素,这种方法简洁明了,符合大家对像素的直观认识
lcd画圆 参考技术B 百度知道
如何画出一个标准的圆,画圆的时候该注意些什...展开
sevenzealing
高粉答主
关注我不会让你失望
关注
成为第11753位粉丝
圆规使用时应注意:
1、固定的圆规针脚不能移动。
2、一旦确定画圆时候的半径,那么圆规两脚之间的距离就不可以再变化。
3、针脚那一头尖锐,使用时要注意不要伤到手。
4、画圆的过程中圆规要稍微倾斜30度左右,使画出的圆的线条流畅。
5、圆规两脚之间的高度要一样。
圆是一种几何图形。根据定义,通常用圆规来画圆。
同圆内圆的直径、半径长度永远相同,圆有无数条半径和无数条直径。圆是轴对称、中心对称图形。对称轴是直径所在的直线。 同时,圆又是“正无限多边形”,而“无限”只是一个概念。当多边形的边数越多时,其形状、周长、面积就都越接近于圆。所以,世界上没有真正的圆,圆实际上只是概念性的图形。
扩展资料
画圆的其他方法:
1、用手指画圆。以大拇指为圆心,以食指与大拇指之间的距离为半径,旋转一周所形成的图形就是圆形。
2、将绳子的一端按在圆心的位置,拉直绳子,沿着圆心画,注意笔身要保持垂直。
3、还有一种方法是在绳子的两端各系一支铅笔,把一支定在圆心的位置,另一支绕着圆心画
模板计几圆的反演
hdu4773:http://acm.hdu.edu.cn/showproblem.php?pid=4773
题意:给你两个相离的圆,以及一个点,求所有和这两个圆相切,并且经过该点的圆。
我们先画出满足题意的圆,然后把这三个圆反演,给定的两个圆因为不经过p点,反演后是两个圆,然后ans圆经过p点,所以反演后是一条直线,又因为和两个圆相切,所以反演出来的直线也是和两个圆相切的,所以就是两个反演圆的外公切线了(不可以是内公切先,画画图就明白了)。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define eps 1e-6 4 int sgn(double x){ 5 if( fabs(x) < eps) return 0; 6 if( x < 0) return -1; 7 return 1; 8 } 9 struct Point{ 10 double x,y; 11 Point operator - (const Point& b){ 12 return (Point){ x - b.x,y-b.y}; 13 } 14 Point operator + (const Point& b){ 15 return (Point){x+b.x,y+b.y}; 16 } 17 Point operator * (const double& b){ 18 return (Point){b * x,b * y}; 19 } 20 Point Move(double a,double d){ 21 return (Point){ x + d * cos(a),y + d * sin(a)}; 22 } 23 }; 24 struct Circle{ 25 Point o; 26 double r; 27 }c[3],c0,ansc[3]; 28 int tot; 29 double cross(Point a,Point b,Point c){ 30 return (b.x - a.x) * (c.y - a.y) - (c.x - a.x)*(b.y - a.y); 31 } 32 double dot(Point a,Point b,Point c){ 33 return (b.x - a.x) * (c.x - a.x) + (b.y - a.y) * (c.y - a.y); 34 } 35 double dis(Point a,Point b){ 36 return sqrt( (a.x - b.x) * (a.x - b.x) + (a.y - b.y)*(a.y - b.y)); 37 } 38 Point Point_Inver(Circle c0,Point P){ 39 Point OP = P - c0.o; 40 double len = dis(c0.o,P); 41 len = len*len; 42 return c0.o + OP*( c0.r * c0.r / len ); 43 } 44 Circle Circle_Inver(Circle c0,Circle a){ 45 Circle res; 46 Point OA = a.o - c0.o; 47 double len = dis(a.o,c0.o); 48 Point up = c0.o + OA * ( ( len + a.r) / len ); 49 Point down = c0.o + OA *( (len - a.r) / len ); 50 up = Point_Inver(c0,up); 51 down = Point_Inver(c0,down); 52 res.o = (up+down) * 0.5; 53 res.r = dis(up,down) * 0.5; 54 return res; 55 } 56 Circle Line_Inver(Circle c0,Point a,Point b){ 57 Circle res; 58 double d = fabs( cross(a,c0.o,b) / dis(a,b)); 59 res.r = c0.r * c0.r / (2.0 * d); 60 61 double len = dot(a,b,c0.o) / dis(a,b); 62 Point AB = b - a; 63 Point c = a + AB * (len/dis(a,b)); 64 Point CO = c - c0.o; 65 res.o = c0.o + CO * (res.r/d); 66 67 //double len = dis(a,c[1].o); 68 //res.o = c0.o + (a-c[1].o) * (res.r/len); 69 return res; 70 } 71 void solve(){ 72 for(int i = 1;i<=2;++i) c[i] = Circle_Inver(c0,c[i]); 73 if( c[1].r < c[2].r - eps) swap(c[1],c[2]); 74 Point v = c[2].o - c[1].o; 75 double a1 = atan2(v.y,v.x); 76 double a2 = acos( (c[1].r - c[2].r) / dis(c[1].o,c[2].o)); 77 Point p1 = c[1].o.Move(a1 + a2,c[1].r); 78 Point p2 = c[2].o.Move(a1 + a2,c[2].r); 79 //cerr<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<endl; 80 if( sgn(cross(c[1].o,p1,p2)) == sgn(cross(c0.o,p1,p2)) ) ansc[++tot] = Line_Inver(c0,p1,p2); 81 p1 = c[1].o.Move(a1-a2,c[1].r); 82 p2 = c[2].o.Move(a1-a2,c[2].r); 83 //cerr<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<endl; 84 if( sgn(cross(c[1].o,p1,p2)) == sgn(cross(c0.o,p1,p2)) ) ansc[++tot] = Line_Inver(c0,p1,p2); 85 } 86 int main(){ 87 c0.r = 10.0; 88 int T; scanf("%d",&T); 89 while(T--){ 90 tot = 0; 91 for(int i = 1;i<=2;++i) scanf("%lf %lf %lf",&c[i].o.x,&c[i].o.y,&c[i].r); 92 scanf("%lf %lf",&c0.o.x,&c0.o.y); 93 solve(); 94 printf("%d ",tot); 95 for(int i = 1;i<=tot;++i) printf("%.8f %.8f %.8f ",ansc[i].o.x,ansc[i].o.y,ansc[i].r); 96 } 97 return 0; 98 }
以上是关于lcd240128的如何画出一个圆的形状的主要内容,如果未能解决你的问题,请参考以下文章