【Geometry】Compute Coordinates of Pentagram Vertexes

Dependency
kotlin 复制代码
api("io.github.hellogoogle2000:kotlin-commons:+")
Sources
kotlin 复制代码
import x.kotlin.commons.serialize.JSON.toJson
import kotlin.math.PI
import kotlin.math.cos
import kotlin.math.sin

data class Point(var x: Double = 0.0, var y: Double = 0.0)

fun main() {

    // basic info
    val cx = 100.0
    val cy = 100.0
    val R = 100.0
    val radiusRatio = sin(Math.toRadians(18.0)) / sin(Math.toRadians(126.0))
    val r = R * radiusRatio
    val degree = 2 * PI / 5

    // compute points
    val p1 = Point()
    val p2 = Point()
    val p3 = Point()
    val p4 = Point()
    val p5 = Point()
    val p6 = Point()
    val p7 = Point()
    val p8 = Point()
    val p9 = Point()
    val p10 = Point()
    p1.x = cx
    p1.y = cy - R
    p2.x = cx + r * sin(degree * 0.5)
    p2.y = cy - r * cos(degree * 0.5)
    p3.x = cx + R * sin(degree)
    p3.y = cy - R * cos(degree)
    p4.x = cx + r * cos(degree * 1.5 - PI / 2)
    p4.y = cy + r * sin(degree * 1.5 - PI / 2)
    p5.x = cx + R * cos(degree * 2 - PI / 2)
    p5.y = cy + R * sin(degree * 2 - PI / 2)
    p6.x = cx
    p6.y = cy + r
    p7.x = cx - R * cos(degree * 2 - PI / 2)
    p7.y = cy + R * sin(degree * 2 - PI / 2)
    p8.x = cx - r * cos(degree * 1.5 - PI / 2)
    p8.y = cy + r * sin(degree * 1.5 - PI / 2)
    p9.x = cx - R * sin(degree)
    p9.y = cy - R * cos(degree)
    p10.x = cx - r * sin(degree * 0.5)
    p10.y = cy - r * cos(degree * 0.5)

    // print points
    val points = listOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
    println(points.toJson())

    // print size
    val width = (p3.x - p9.x).toFloat()
    val height = (p7.y - p1.y).toFloat()
    val ratio = height / width
    println("cx=$cx cy=$cy r=$r width=$width height=$height ratio=$ratio")

    // print sides
    val sides = mutableListOf<List<FloatArray>>()
    for (i in 0 until points.size) {
        val first = points[i]
        val second = points[if (i == points.size - 1) 0 else i + 1]
        val pointPair = listOf(
            floatArrayOf(first.x.toFloat(), first.y.toFloat()),
            floatArrayOf(second.x.toFloat(), second.y.toFloat())
        )
        sides.add(pointPair)
    }
    print(sides.toJson())
}
相关推荐
Kapaseker9 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z2 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton3 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream3 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam3 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker3 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc4 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景4 天前
kotlin协程学习小计
android·kotlin
Kapaseker4 天前
你搞得懂这 15 个 Android 架构问题吗
android·kotlin
zh_xuan5 天前
kotlin 高阶函数用法
开发语言·kotlin