已知两点和弧长lisp_已知圆心和两点画圆弧(算法)(计算机图形)(C#)
如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求出原点到两点向量和x轴间的夹角余弦值,然后求反余弦得出角度,这里要注意的是,求出的向量的夹角是按几何坐标系中定义的逆时针,然后用DrawArc()函数画圆弧。
如图的三点:o(200,200),a(100,100),b(300,100)
求夹角的方法是使用高中学过的向量求夹角公式:
通过该公式,很方便地求出a,b向量的夹角的余弦值,然后使用反余弦函数求出弧长,然后用弧长radian*(180/pi)求出几何坐标系中的夹角。
这个时候值得注意的是C#里面GDI+使用的坐标体系与常用的几何坐标系有所不同,所以画圆弧使用DrawArc()函数的时候要小心,从MSDN中可以看到DrawArc()的用法:
C# public void DrawArc (Pen pen,float x,float y,float width,float height,float startAngle,float sweepAngle)
参数
penPen,它确定弧线的颜色、宽度和样式。x定义椭圆的矩形的左上角的 x 坐标。y定义椭圆的矩形的左上角的 y 坐标。width定义椭圆的矩形的宽度。height定义椭圆的矩形的高度。startAngle从 x 轴到弧线的起始点沿顺时针方向度量的角(以度为单位)。sweepAngle从 startAngle 参数到弧线的结束点沿顺时针方向度量的角(以度为单位)。
这里的startAngle 是从 x 轴到弧线的起始点沿顺时针方向度量的角,而不是几何坐标体系中的逆时针所以使用startAngle 的时候,要在原来的坐标体系值加上90度,下面贴出源程序:
运行情况为:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace draw
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
//三个点,O为原点,A、B为圆上另外两点
Point Point_O = new Point(200, 200);
Point Point_A = new Point(100, 100);
Point Point_B = new Point(300, 100);
//x轴上的向量
int Vector_Xx = 100;
int Vector_Xy = 0;
//oa向量
int Vector_ax = Point_A.X - Point_O.X;
int Vector_ay = Point_A.Y - Point_O.Y;
//ob向量
int Vector_bx = Point_B.X - Point_O.X;
int Vector_by = Point_B.Y - Point_O.Y;
//oa和X轴上向量的点乘积
int Point_Mul_a = (Vector_ax * Vector_Xx) + (Vector_ay * Vector_Xy);
double Mul_a = Math.Sqrt(Vector_ax * Vector_ax + Vector_ay * Vector_ay) * Math.Sqrt(Vector_Xx * Vector_Xx + Vector_Xy * Vector_Xy);
//计算oa和x轴夹角余弦值
double Cos_a = Point_Mul_a / Mul_a;
double A_Cos = Math.Acos(Cos_a);
//求出几何坐标系中的角度,即按逆时针的方法
double A_Angle = A_Cos * (180 / Math.PI);
//b和X轴上向量的点乘积
int Point_Mul_b = (Vector_bx * Vector_Xx) + (Vector_by * Vector_Xy);
double Mul_b = Math.Sqrt(Vector_bx * Vector_bx + Vector_by * Vector_by) * Math.Sqrt(Vector_Xx * Vector_Xx + Vector_Xy * Vector_Xy);
计算b和x轴夹角余弦值
double Cos_b = Point_Mul_b / Mul_b;
double B_Cos = Math.Acos(Cos_b);
//求出几何坐标系中的角度,即按逆时针的方法
double B_Angle = B_Cos * (180 / Math.PI);
//初始化画板
Graphics gr = this.CreateGraphics();
Brush br = new SolidBrush(Color.Black);
Pen pe = new Pen(Color.Black, 10);
//画出原点
gr.FillEllipse(br,200,200,7,7);
//画出圆弧
gr.DrawArc(pe, 100, 100, 200, 200, (float)(A_Angle+90), (float)(A_Angle-B_Angle));
}
}
}
程序后的思考:本程序没有关心圆弧到底是劣弧还是优弧,要视使用情况而定。
已知两点和弧长lisp_已知圆心和两点画圆弧(算法)(计算机图形)(C#)相关推荐
- 已知两点和弧长lisp_计算球面上两点弧长
1,三角形余弦定理 余弦定理是揭示三角形边角关系的重要定理,直接运用它可解决一类已知三角形两边及夹角求第三边或者是已知三个边求角的问题,若对余弦定理加以变形并适当移于其它知识,则使用起来更为方便.灵活 ...
- 关于已知两点经纬度求球面最短距离的公式推导
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下: 可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下.首先画个图(图1),要不然空间想象能力差的话容易犯糊涂.首先对图1做个大致的 ...
- matlab 计算大圆距离,已知两点经纬度计算两点之间的大圆距离
Const r As Double = 6378137 '地球半径常量 Const PI As Double = 3.1415926 '圆周率常量 Private Type LatLog lat As ...
- 转 已知两点坐标和半径求圆心坐标程序C++
数学思想:利用圆方程和直线方程 已知两点坐标和半径求圆心坐标程序 #include <iostream> #include <fstream> #include <cma ...
- 已知两点坐标拾取怎么操作_已知的操作员学习-第4部分
已知两点坐标拾取怎么操作 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU's ...
- 已知两点坐标拾取怎么操作_已知的操作员学习-第3部分
已知两点坐标拾取怎么操作 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU's ...
- 已知两点经纬度求球面最短距离的公式推导过程(几何法加向量法)
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下: 可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下.首先画个图(图1),要不然空间想象能力差的话容易犯糊涂.首先对图1做个大致的 ...
- 已知两点,求两点与原点连线的角度
/* 怎么求夹角:已知两点坐标要求其到原点连线的夹角, 那么我们可以用向量去做, 用向量的积除以向量模的乘积,在求其反函数, 然后转换为角度就可以知道其角度为多少了: 向量的模的乘积怎么算: sqrt ...
- python3 已知两点坐标算角度
import mathdef azimuthangle(x1, y1, x2, y2):""" 已知两点坐标计算角度 -:param x1: 原点横坐标值:param y ...
最新文章
- 谷歌大脑最新研究:用AutoML的方式自动学习Dropout模式,再也不用手动设计
- uglify压缩angular控制器注意
- 动圈耳机振膜_耳机中的动圈、动铁、圈铁都是什么意思 买哪种最好?
- 微软程序员利用测试账户套现千万美元,或面临 20 年监禁
- ubus c语言例子,openwrt之ubus例子
- opengl三维图形图形颜色_【图形学基础】基本概念
- 数据结构与算法——常用数据结构及其Java实现
- python必看经典书籍:笨办法学python
- oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
- 《C语言程序设计(第五版)》---谭浩强——习题解答第一章
- MYSQL安装遇到MySQL-server conflicts with错误(mysql5.6.17)
- 知道两点经纬度,计算双方距离与方向的原理
- WGCLOUD在windows部署运行怎么实现隐藏窗口
- yarn serve yarn : 无法加载文件 D:\node\node_global\yarn.ps1,因为在此系统上禁止运行脚本。
- 超声系统发射变迹仿真(Ultrasound Emit apodization Simulation)
- “技术天才”李一男已出狱:曾被视为华为接班人!
- java工程师 英文_java软件工程师英文简历模板
- oracle分区表的优势
- DPU智能网卡OVS全卸载方案
- 中彩双色球彩票软件 红球预测专家 多特软件