SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
이해석
PencilKit과 Point in Polygon
알고리즘을 활용한 올가미 툴 개발기
콴다(매스프레소)
목차
1.올가미 툴이란?
2.PencilKit 알아보기
3.어떻게 구현 했나요?
4.마무리
올가미 툴이란?
GoodNotes Notability
QANDA
PencilKit 알아보기
PencilKit
Framework iOS 13+ iPadOS 13+
macOS 10.15+
(macOS Catalina)
iOS 14+ iPadOS 14+ macOS 11.0+
(macOS Big Sur)
PencilKit
PKDrawing
PKStroke
PKInk
PKTool
PKToolPicker
PKCanvasView
PKStrokePath PKStrokePoint
PKInkingTool
PKLassoTool
PKEraserTool
PencilKit
PKDrawing
PKStroke
PKInk
PKTool
PKToolPicker
PKCanvasView
PKStrokePath PKStrokePoint
PKInkingTool
PKLassoTool
PKEraserTool
PKCanvasView
iOS 13+
PKDrawing
iOS 13+
QANDA
PKInk
PKStrokePath
PKStrokePoint
PKStroke
iOS 14+
Location / Force
Azimuth
Altitude
PKToolPicker
iOS 13+
PKTool
iOS 13+
PKEraserTool
PKLassoTool
PKInkingTool
Ruler
PKLassoTool 👎
PKStroke 이외에도 사용자가 PKCanvasView 위에 올린
이미지 / 텍스트 (UIView)에도 올가미의 기능을 적용해야 함
UI/ 기능 확장의 어려움
올가미 기능
PKStroke 뿐만 아니라 PKCanvasView 위에 올린 이미지 또는 텍스트 뷰를 잡을 수 있어야 함
올가미가 아이템들을 잡은 상태에서 아이템들의 위치를 이동시킬 수 있어야함
어떻게 구현했나요?
올가미 안에 어떤 아이템이 포함 되었는지
포함되지 않았는지 어떻게 알 수 있을까?
다각형 안에 어떤 점들이 포함 되었는지 포
함되지 않았는지 어떻게 알 수 있을까?
Point in Polygon Problem
https://en.wikipedia.org/wiki/Point_in_polygon
평면에서 주어진 점이 다각형의 내부 혹은 외부에 있는지를 판별하는 문제
Ray casting algorithm
https://en.wikipedia.org/wiki/Point_in_polygon
O(N) 시간 복잡도
crossing number 알고리즘 혹은 even-odd rule 알고리즘이라고 함
https://en.wikipedia.org/wiki/Point_in_polygon
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
PKStroke
PKStroke 을 점으로 표현할 수 없을까?
WWDC20: inspect, modify, and construct PencilKit drawings
UIView 는 어떻게 잡을 수 있을까?
UIImageView
CGRect의 contains?
UIImageView
더 정밀하게 잡을 수 없을까?
UIImageView를 점들로 표현해보자!
UIImageView
UIImageView
기준점을 원점으로 보냄
원점을 기준으로 Transform
원위치로 다시 이동
1
2
3
(xr, yr)
(xr, yr)
1 2 3
import UIKit
extension UIView {
var frameBeforeTransformed: CGRect {
let previousTransform = transform
transform = .identity
let frame = frame
transform = previousTransform
return frame
}
func transformedEdges(cases: [CGRectEdgeType] = CGRectEdgeType.allCases) -> [CGPoint] {
let result = cases.map { edgeType -> CGPoint in
let point = frameBeforeTransformed.point(type: edgeType)
let movedPoint = pointBeforeTransformed(point)
let transformedPoint = movedPoint.applying(transform)
return pointAfterTransformed(transformedPoint)
}
return result
}
func pointBeforeTransformed(_ point: CGPoint) -> CGPoint {
return .init(x: point.x - center.x, y: point.y - center.y);
}
func pointAfterTransformed(_ point: CGPoint) -> CGPoint {
return .init(x: point.x + center.x, y: point.y + center.y);
}
}
import UIKit
enum CGRectEdgeType: CaseIterable {
case leftTop
case leftBottom
case rightTop
case rightBottom
}
extension CGRect {
func point(type: CGRectEdgeType) -> CGPoint {
switch type {
case .leftTop:
return CGPoint(x: minX, y: minY)
case .leftBottom:
return CGPoint(x: minX, y: maxY)
case .rightTop:
return CGPoint(x: maxX, y: minY)
case .rightBottom:
return CGPoint(x: maxX, y: maxY)
}
}
}
1
2
3
UIImageView
Accelerate
고성능 & 낮은 에너지 소비에 최적화된 수학/이미지 계산 라이브러리
Accelerate: vDSP_vgenp(_:_:_:_:_:_:_:_)
func linearInterpolation(point1: CGPoint, point2: CGPoint) -> [CGPoint] {
let (start, end) = point2.x < point1.x ? (point2, point1) : (point1, point2)
let (startX, endX) = (Float(start.x), Float(end.x))
let (startY, endY) = (Float(start.y), Float(end.y))
let (deltaX, deltaY) = (abs(endX - startX), abs(endY - startY))
let maxDelta = max(deltaX, deltaY)
let (indices, stride, n) = ([0, maxDelta], vDSP_Stride(1), vDSP_Length(maxDelta))
var xPoints = [Float](repeating: 0, count: Int(n))
var yPoints = [Float](repeating: 0, count: Int(n))
var values = [startX, endX]
vDSP_vgenp(
values, stride,
indices, stride,
&xPoints, stride,
n, vDSP_Length(values.count)
)
values = [startY, endY]
vDSP_vgenp(
values, stride,
indices, stride,
&yPoints, stride,
n, vDSP_Length(values.count)
)
return zip(xPoints, yPoints).map { CGPoint(x: CGFloat($0), y: CGFloat($1)) }
}
UIImageView
Edge case를 찾아보자
Case1
Case2
Case3
Case3
Case3
올가미로 잡은 아이템을 어떻게 옮길 수 있을까?
UIView를 옮기는 건 쉬운데…
PKStroke은 어떻게 옮길 수 있을까?
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
import PencilKit
extension PKStroke {
func createNewStroke(with transform: CGAffineTransform) -> PKStroke {
let dx = transform.tx
let dy = transform.ty
let resultPoint: [PKStrokePoint] = path.map { p in
return PKStrokePoint(
location: CGPoint(x: (p.location.x + dx), y: (p.location.y + dy)),
timeOffset: p.timeOffset,
size: p.size,
opacity: p.opacity,
force: p.force,
azimuth: p.azimuth,
altitude: p.altitude
)
}
let resultPath = PKStrokePath(controlPoints: resultPoint, creationDate: Date())
var resultStroke = PKStroke(ink: PKInk(ink.inkType, color: ink.color), path: resultPath, transform: .identity)
if let mask = mask {
mask.apply(transform)
resultStroke.mask = mask
}
return resultStroke
}
}
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
QANDA
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
올가미로 잡은 PKStroke을
PKDrawing에서 분리
⚠ 랜더링 병목 발생!
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
Changed
Ended
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
PKDrawing: image(from: CGRect, scale: CGFloat)
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
Changed
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
이미지 뷰를 transform 시킴
transform 된 PKStroke 생성
이미지 뷰 제거
새로운 PKStroke을 PKCansvasView의 PKDrawing에 반영
Ended
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true false
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
detach captured strokes
Ray casting algorithm
move uiviews
move image view (strokes)
attach captured strokes
detach image view
Ray casting algorithm
attach image view
attach image view
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
Ray casting algorithm
Ray casting algorithm
append lasso point
draw bezier path
append lasso point
draw bezier path
Ray casting algorithm
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
Ray casting algorithm
attach image view
QANDA
Apple Documentation
PencilKit
https://developer.apple.com/documentation/pencilkit
Accelerate
https://developer.apple.com/documentation/accelerate
WWDC
Introducing PencilKit
https://developer.apple.com/videos/play/wwdc2019/221/
What’s new in PencilKit
https://developer.apple.com/videos/play/wwdc2020/10107/
Inspect,modify,and construct PencilKit drawings
https://developer.apple.com/videos/play/wwdc2020/10148
콴다 기술 블로그
iOS PencilKit을 활용한 Drawing 노트 개발기
https://blog.mathpresso.com/ios-pencilkit을-활용한-drawing-노트-개발기-
d50019d42041
이해석
감사합니다
콴다(매스프레소)
Special Thanks
신연화 님 / QANDA iOS 팀 / 이정엽, 정초이
Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기

Más contenido relacionado

La actualidad más candente

Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationSeven Peaks Speaks
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기NHN FORWARD
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android DevelopmentSpeck&Tech
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4ICS
 
Dart PPT.pptx
Dart PPT.pptxDart PPT.pptx
Dart PPT.pptxDSCMESCOE
 
Mengenal Fitur Keamanan Dasar pada Windows 7
Mengenal Fitur Keamanan Dasar pada Windows 7Mengenal Fitur Keamanan Dasar pada Windows 7
Mengenal Fitur Keamanan Dasar pada Windows 7Aris Lesmana
 
Hello, ReactorKit 
Hello, ReactorKit Hello, ReactorKit 
Hello, ReactorKit Suyeol Jeon
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIGilang Ramadhan
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application StructureSEONGTAEK OH
 
Inside Flutter: Widgets, Elements, and RenderObjects
Inside Flutter: Widgets, Elements, and RenderObjectsInside Flutter: Widgets, Elements, and RenderObjects
Inside Flutter: Widgets, Elements, and RenderObjectsHansol Lee
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesLauren Yew
 

La actualidad más candente (20)

Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android application
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android Development
 
Kotlin on android
Kotlin on androidKotlin on android
Kotlin on android
 
Presentation swagger
Presentation swaggerPresentation swagger
Presentation swagger
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4Best Practices in Qt Quick/QML - Part 4
Best Practices in Qt Quick/QML - Part 4
 
Robot framework
Robot frameworkRobot framework
Robot framework
 
Dart PPT.pptx
Dart PPT.pptxDart PPT.pptx
Dart PPT.pptx
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
C# web api
C# web apiC# web api
C# web api
 
Core java Essentials
Core java EssentialsCore java Essentials
Core java Essentials
 
Mengenal Fitur Keamanan Dasar pada Windows 7
Mengenal Fitur Keamanan Dasar pada Windows 7Mengenal Fitur Keamanan Dasar pada Windows 7
Mengenal Fitur Keamanan Dasar pada Windows 7
 
Hello, ReactorKit 
Hello, ReactorKit Hello, ReactorKit 
Hello, ReactorKit 
 
Log4 J
Log4 JLog4 J
Log4 J
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UI
 
Django Framework and Application Structure
Django Framework and Application StructureDjango Framework and Application Structure
Django Framework and Application Structure
 
OOP Concept
OOP ConceptOOP Concept
OOP Concept
 
Inside Flutter: Widgets, Elements, and RenderObjects
Inside Flutter: Widgets, Elements, and RenderObjectsInside Flutter: Widgets, Elements, and RenderObjects
Inside Flutter: Widgets, Elements, and RenderObjects
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
 

Similar a Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기

Day by day iPhone Programming
Day by day iPhone ProgrammingDay by day iPhone Programming
Day by day iPhone ProgrammingYoung Oh Jeong
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?Jungsoo Park
 
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010devCAT Studio, NEXON
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorialTaeKang Woo
 
임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptxssuser5fef0f
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.병대 손
 
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Kyunghwan Kim
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 

Similar a Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기 (20)

Day by day iPhone Programming
Day by day iPhone ProgrammingDay by day iPhone Programming
Day by day iPhone Programming
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?
 
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorial
 
Picking
PickingPicking
Picking
 
알고리즘
알고리즘알고리즘
알고리즘
 
임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
2D games with iOS or Corona
2D games with iOS or Corona2D games with iOS or Corona
2D games with iOS or Corona
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
Java.next
Java.nextJava.next
Java.next
 

Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기