円の接線の検出
Namespace: FVIL.CaliperAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public static CFviLine TangentLine(
CFviPoint point,
CFviCircle circle
) |
Visual Basic |
---|
Public Shared Function TangentLine (
point As CFviPoint,
circle As CFviCircle
) As CFviLine |
Return Value
Type:
CFviLine
円上の点における接線を求めます。
円上の点の指定は、厳密には整数型の指定では誤差が出てしまいます。
よって本関数では、誤差を四捨五入して1画素未満であれば円の方程式により正しい円上の点を導きだし、
その点上での接線の方程式を求めます。
正常に実行できなかった場合は例外を発行します。
例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|
51 | FVIL.ErrorCode.LICENSE_ERROR |
ライセンスキーが見つからない為、実行できません。
または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
|
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータに誤りがあります。 |
29 | FVIL.ErrorCode.NOT_CALCULABLE | 計算不可能です。 |
Examples
C# | Copy |
---|
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;
namespace User.SampleCode
{
public partial class Caliper
{
[FvPluginExecute]
public void TangentLine()
{
FVIL.Data.CFviPoint point = new FVIL.Data.CFviPoint(220, 120);
FVIL.Data.CFviCircle circle = new FVIL.Data.CFviCircle(140, 120, 80);
FVIL.Data.CFviLine line = FVIL.Caliper.Function.TangentLine(point, circle);
{
FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1);
FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay();
FVIL.GDI.CFviOverlay overlay = new FVIL.GDI.CFviOverlay();
{
FVIL.GDI.CFviGdiPoint gpoint1 = new FVIL.GDI.CFviGdiPoint(point);
gpoint1.Pen.Color = Color.Green;
gpoint1.Pen.Width = 4;
FVIL.GDI.CFviGdiPoint gpoint2 = new FVIL.GDI.CFviGdiPoint(circle.Center);
gpoint2.Pen.Color = Color.Green;
gpoint2.Pen.Width = 4;
FVIL.GDI.CFviGdiCircle gcircle = new FVIL.GDI.CFviGdiCircle( circle );
gcircle.Pen.Color = Color.Green;
gcircle.Pen.Width = 1;
gcircle.Pen.Style = FVIL.GDI.PenStyle.Solid;
FVIL.GDI.CFviGdiLine gline1 = new FVIL.GDI.CFviGdiLine( line );
gline1.Pen.Color = Color.Red;
gline1.Pen.Width = 1;
gline1.Pen.Style = FVIL.GDI.PenStyle.Solid;
FVIL.Data.CFviLine horz = FVIL.Caliper.Function.VerticalLine(point, line);
FVIL.Data.CFviLineSegment horz_part = new FVIL.Data.CFviLineSegment(circle.Center, FVIL.Caliper.Function.CrossPoint(line, horz));
FVIL.GDI.CFviGdiLineSegment gline2 = new FVIL.GDI.CFviGdiLineSegment(horz_part);
gline2.Pen.Color = Color.Green;
gline2.Pen.Width = 1;
gline2.Pen.Style = FVIL.GDI.PenStyle.Dot;
overlay.Figures.Add(gpoint1);
overlay.Figures.Add(gpoint2);
overlay.Figures.Add(gcircle);
overlay.Figures.Add(gline1);
overlay.Figures.Add(gline2);
overlay.Enable = true;
}
display.Overlays.Add(overlay);
display.Image = image;
display.DisplayRect = image.Window;
FVIL.Data.CFviImage dstimage = new FVIL.Data.CFviImage();
display.SaveImage(dstimage);
FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Caliper.TangentLine.png", dstimage);
}
}
}
} |
Visual Basic | Copy |
---|
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
Namespace SampleCode
Public Partial Class Caliper
<FvPluginExecute> _
Public Sub TangentLine()
Dim point As New FVIL.Data.CFviPoint(220, 120)
Dim circle As New FVIL.Data.CFviCircle(140, 120, 80)
Dim line As FVIL.Data.CFviLine = FVIL.Caliper.[Function].TangentLine(point, circle)
If True Then
Dim image As New FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1)
Dim display As New FVIL.GDI.CFviDisplay()
Dim overlay As New FVIL.GDI.CFviOverlay()
If True Then
Dim gpoint1 As New FVIL.GDI.CFviGdiPoint(point)
gpoint1.Pen.Color = Color.Green
gpoint1.Pen.Width = 4
Dim gpoint2 As New FVIL.GDI.CFviGdiPoint(circle.Center)
gpoint2.Pen.Color = Color.Green
gpoint2.Pen.Width = 4
Dim gcircle As New FVIL.GDI.CFviGdiCircle(circle)
gcircle.Pen.Color = Color.Green
gcircle.Pen.Width = 1
gcircle.Pen.Style = FVIL.GDI.PenStyle.Solid
Dim gline1 As New FVIL.GDI.CFviGdiLine(line)
gline1.Pen.Color = Color.Red
gline1.Pen.Width = 1
gline1.Pen.Style = FVIL.GDI.PenStyle.Solid
Dim horz As FVIL.Data.CFviLine = FVIL.Caliper.[Function].VerticalLine(point, line)
Dim horz_part As New FVIL.Data.CFviLineSegment(circle.Center, FVIL.Caliper.[Function].CrossPoint(line, horz))
Dim gline2 As New FVIL.GDI.CFviGdiLineSegment(horz_part)
gline2.Pen.Color = Color.Green
gline2.Pen.Width = 1
gline2.Pen.Style = FVIL.GDI.PenStyle.Dot
overlay.Figures.Add(gpoint1)
overlay.Figures.Add(gpoint2)
overlay.Figures.Add(gcircle)
overlay.Figures.Add(gline1)
overlay.Figures.Add(gline2)
overlay.Enable = True
End If
display.Overlays.Add(overlay)
display.Image = image
display.DisplayRect = image.Window
Dim dstimage As New FVIL.Data.CFviImage()
display.SaveImage(dstimage)
FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Caliper.TangentLine.png", dstimage)
End If
End Sub
End Class
End Namespace |
Exceptions
See Also