T-SQL 440 483
จะไม่ชนะรางวัลใด ๆ กับอันนี้ แต่ฉันชอบวาดรูป :)
แก้ไขคำย่อ! เพิ่งสังเกตว่าฉันทำผิดพลาดกับรูปหลายเหลี่ยมที่วาดข้ามวงกลม คงที่ค่าใช้จ่าย
SELECT Geometry::UnionAggregate(Geometry::Point(0,0,0).STBuffer(@r).STExteriorRing().STUnion(Geometry::STGeomFromText(CONCAT('LINESTRING(',@r*SIN(a),' ',@r*COS(a),',',@r*SIN(a)+@l*SIN(b),' ',@r*COS(a)+@l*COS(b),')'),0))).STUnion(Geometry::ConvexHullAggregate(Geometry::Point(@r*SIN(a)+@l*SIN(b),@r*COS(a)+@l*COS(b),0)).STExteriorRing())p FROM(SELECT RADIANS(360./@*N)a,RADIANS((360./@*N)-90)b FROM(SELECT TOP(@)row_number()OVER(ORDER BY(SELECT\))-1N FROM sys.types a,sys.types b)t)r
ดำเนินการกับตัวแปรดังต่อไปนี้
declare @r float = 1.0
declare @ int = 10
declare @l float = 3.0
เรียกใช้ใน Sql Server Management Studio 2012 ขึ้นไปซึ่งจะส่งคืนสิ่งต่อไปนี้ในแท็บผลลัพธ์เชิงพื้นที่

กับ
declare @r float = 1.0
declare @ int = 360
declare @l float = 3.0

กับ
declare @r float = 10.0
declare @ int = 3
declare @l float = 10.0

ขยายออก
SELECT Geometry::UnionAggregate( --group together lines
Geometry::Point(0,0,0) --Set origin
.STBuffer(@r) --Buffer to @r
.STExteriorRing() --Make it a line
.STUnion( --Join to the floowing tangent
Geometry::STGeomFromText( --Create a tangent line
CONCAT('LINESTRING(',@r*SIN(a),' ',@r*COS(a),',',@r*SIN(a)+@l*SIN(b),' ',@r*COS(a)+@l*COS(b),')'),0)
)
).STUnion( --Generate polygon around exterior points
Geometry::ConvexHullAggregate(Geometry::Point(@r*SIN(a)+@l*SIN(b),@r*COS(a)+@l*COS(b),0)).STExteriorRing()
)
p
FROM(
SELECT RADIANS(360./@*N)a, --calclate bearings
RADIANS((360./@*N)-90)b
FROM( --make enough rows to draw tangents
SELECT TOP(@)row_number()OVER(ORDER BY(SELECT\))-1N
FROM sys.types a,sys.types b
)t
)r